Различия между реализациями JVM

Где реализация JVM отличается (кроме лицензирования)? Поддерживает ли каждый JVM Type Erasure для общей обработки?

Где различия между:

  • JRockit
  • IBM JVM
  • SUN JVM
  • Открыть JDK
  • Blackdown
  • Каффе

..... Делает один из них с помощью Tail-Call-Optimization?

Ответ 1

Реализации 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.

Ответ 3

Компиляция JIT - это одно, что некоторые JVM: s не имеют.

Ответ 4

Такие вещи, как стирание стилей, выполняются компилятором для обратной совместимости с более старыми JVM. Большинство JVM должны поддерживать все функции, которые вам нужны, но некоторые из них могут быть более оптимизированы, чем другие. Я предполагаю, что Sun JVM, вероятно, самый быстрый.

Ответ 5

Если JVM претендует на роль Java, он должен передать TCK, предоставляя множество акций funcitonaltiy.

Различия в неосновных местах, такие как сбор мусора, jconsole/visualvm в Sun JVM, предварительная компиляция и т.д.


пояснение: TCK - это набор тестов, который должна пройти виртуальная машина, чтобы быть официально совместимым с Java.

Ответ 7

Другим различием между JVM является поведение в недокументированном API. (например, com.sun.xxx) Например, Sun JVM и IBM JVM имеют несколько иное поведение при обработке сигналов. (IBM JVM не позволяет приложению захватывать сигнал "INT" в определенных случаях.)

Ответ 8

JVM похож на виртуальную машину, которая работает, чтобы загрузить переменную класса и Bytcode, выполнить код. в то время как интерфейс программирования Applocaion - это сборка пакетов. и Пакеты - это коллекция класса. Программа Java выполняется там, где установлена ​​и работает JVM.