Где реализация JVM отличается (кроме лицензирования)? Поддерживает ли каждый JVM Type Erasure для общей обработки?
Где различия между:
- JRockit
- IBM JVM
- SUN JVM
- Открыть JDK
- Blackdown
- Каффе
..... Делает один из них с помощью Tail-Call-Optimization?
Где реализация JVM отличается (кроме лицензирования)? Поддерживает ли каждый JVM Type Erasure для общей обработки?
Где различия между:
..... Делает один из них с помощью Tail-Call-Optimization?
Реализации JVM могут различаться в том, как они реализуют компиляцию JIT, оптимизацию, сборку мусора, поддерживаемые платформы, версию поддерживаемой Java и т.д. Все они должны соответствовать набору функций и поведения, чтобы они правильно выполняли ваши байт-коды Java.
Как вы уже отметили, основное различие, как правило, заключается в лицензировании. Другие нетехнические различия, как правило, находятся в вариантах бесплатной/платной поддержки, интеграции с другими технологиями (обычно это серверы J2EE) и доступа к исходному коду.
Примечание. Хотя J2EE-сервер работает на JVM, некоторые серверы имеют встроенные инструменты для мониторинга, анализа и настройки производительности JVM.
Что касается технических различий, то за эти годы они стали менее значительными. Когда-то IBM и JRockit JVM имели гораздо более высокую производительность для эталонной реализации Sun. Это было связано с существенными различиями в типах оптимизации времени выполнения, различиях в сборе мусора и различиях в собственном коде (и в том, как использует собственный класс для разных классов). Эти различия в производительности не так важны.
Некоторые JVM также включают или интегрируются с инструментами диагностики и мониторинга. JRockit включает в себя набор инструментов для мониторинга производительности JVM. Sun предоставляет различные инструменты на основе JMX с перекрывающимися функциями, чтобы сделать то же самое. IBM Websphere когда-то включала в себя аналогичный набор инструментов для всего своего сервера приложений J2EE (не уверен, что они все еще делают, но я бы предположил, что все еще верно)...
Некоторые из JVM с открытым исходным кодом имеют тенденцию к снижению производительности, поскольку они были переработаны с нуля. Таким образом, у них есть немного больше возможностей догнать. Последнее, что я проверил около 2 лет назад, Blackdown был значительно медленнее (1.5x-2x?), Чем Sun JVM. Это также немного отставало от поддерживаемых версий Java.
Тип erasure является функцией компилятора и как независимый JVM.
Компиляция JIT - это одно, что некоторые JVM: s не имеют.
Такие вещи, как стирание стилей, выполняются компилятором для обратной совместимости с более старыми JVM. Большинство JVM должны поддерживать все функции, которые вам нужны, но некоторые из них могут быть более оптимизированы, чем другие. Я предполагаю, что Sun JVM, вероятно, самый быстрый.
Если JVM претендует на роль Java, он должен передать TCK, предоставляя множество акций funcitonaltiy.
Различия в неосновных местах, такие как сбор мусора, jconsole/visualvm в Sun JVM, предварительная компиляция и т.д.
пояснение: TCK - это набор тестов, который должна пройти виртуальная машина, чтобы быть официально совместимым с Java.
Оптимизация Tail-Call еще не поддерживается Java. Джон Роуз прилагает усилия, чтобы включить это в будущий выпуск, и описал подход и некоторые из затронутых проблем.
Другим различием между JVM является поведение в недокументированном API. (например, com.sun.xxx) Например, Sun JVM и IBM JVM имеют несколько иное поведение при обработке сигналов. (IBM JVM не позволяет приложению захватывать сигнал "INT" в определенных случаях.)
JVM похож на виртуальную машину, которая работает, чтобы загрузить переменную класса и Bytcode, выполнить код. в то время как интерфейс программирования Applocaion - это сборка пакетов. и Пакеты - это коллекция класса. Программа Java выполняется там, где установлена и работает JVM.