Различия между реализациями JVM - PullRequest
18 голосов
/ 14 апреля 2009

Чем отличаются реализации JVM (кроме лицензирования)? Каждый JVM реализует стирание типа для обработки общего вида?

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

  • JRockit
  • IBM JVM
  • СОЛНЦЕ JVM
  • Открыть JDK
  • Blackdown
  • Каффе

..... Имеет дело с одним из них с Tail-Call-Optimization?

Ответы [ 8 ]

18 голосов
/ 14 апреля 2009

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

12 голосов
/ 14 апреля 2009

Тип стирания - это функция компилятора и как таковая независимая от JVM.

1 голос
/ 14 мая 2010

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

1 голос
/ 06 августа 2009

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

1 голос
/ 14 апреля 2009

Оптимизация вызовов в хвост пока не поддерживается Java. Джон Роуз возглавляет усилия по включению этого в будущий выпуск и описывает подход и некоторые проблемы .

1 голос
/ 14 апреля 2009

Если JVM заявляет, что она Java, она должна пройти TCK, обеспечивая большую функциональность.

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


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

1 голос
/ 14 апреля 2009

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

1 голос
/ 14 апреля 2009

JIT-компиляция - это то, чего нет у некоторых JVM.

...