2009-04-14 6 views
15

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

Где разница между:

  • JRockit
  • IBM JVM
  • ВС JVM
  • Open JDK
  • Blackdown
  • Каффе

.... Предлагает один из них с оптимизацией Tail-Call-Optimization?

ответ

15

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

Как вы указали, основное различие, как правило, заключается в лицензировании. Другие нетехнические различия, как правило, находятся в вариантах бесплатной/платной поддержки, интеграции с другими технологиями (обычно это серверы J2EE) и доступа к исходному коду.

Примечание. Хотя на JVM-сервере работает J2EE-сервер, некоторые серверы имеют встроенные средства для мониторинга, анализа и настройки производительности JVM.

Что касается технических отличий, то за эти годы они стали менее значительными. Когда-то IBM и JRockit JVM имели более высокую производительность для эталонной реализации Sun. Это было связано с существенными различиями в типах оптимизации времени выполнения, различиях в сборе мусора и различиях в собственном коде (и в том, как использует собственный класс для разных классов). Эти различия в производительности не так важны.

Некоторые JVM также включают или интегрируют средства диагностики и мониторинга. JRockit включает в себя набор инструментов для мониторинга производительности JVM. Sun предоставляет различные инструменты на основе JMX с перекрывающимися функциями, чтобы сделать то же самое. IBM Websphere когда-то включала в себя аналогичный набор инструментов для всего своего сервера приложений J2EE (не уверен, что они все еще делают, но я бы предположил, что это все еще правда) ...

Некоторые из JVM с открытым исходным кодом имеют тенденцию к снижению производительности, поскольку они были переработаны с нуля. Таким образом, у них есть немного больше возможностей догнать. Последнее, что я проверил около 2 лет назад, Blackdown был значительно медленнее (1.5x-2x?), Чем Sun JVM. Это также немного отставало от поддерживаемых версий Java.

+0

Поскольку кто-то вынужден использовать JRockit уже более 5 лет, я бы сказал, что в целом это не быстрее, чем Hotspot, но это определенно не так сильно. Они жертвуют надежностью для скорости, и в итоге ничего не получают. – erickson

+0

@erickson, Как человек, который добровольно использовал JRockit уже более 5 лет, могу сказать, что ваш опыт не универсален. JRockit сохранил хотя бы один раз с помощью средства обнаружения утечки памяти. :) У меня больше не было сбоев, чем с виртуальными машинами Sun (хотя их было 1 или 2). – jsight

1

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

+0

Что такое солнце JVM? http://java.sun.com/javase/technologies/hotspot/ Кажется, компилятор JIT Hotspot Jip отпирается с каждым выпуском JVM! –

+0

Я не уверен, что вы хотите сказать там, но да, Hotspot является частью Sun JVM. –

+0

Почему вы говорите, что у evey JVM нет компиляции JIT, когда она входит в состав большинства JVM? Почему ты меня проголосуешь? –

1

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

1

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

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


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

+0

Комплект совместимости технологий. http://jcp.org/en/resources/tdk –

1

Оптимизация Tail-call еще не поддерживается Java. Джон Роуз прилагает усилия, чтобы включить это в будущий выпуск, и описал approach, and some of the issues.

+0

Я помню варианты Java6 (экспериментальные функции), возможно, Sun JDK поддерживает его как экспериментальный? Что случилось с «Da vinchi VM», я слышал, что он должен поддерживать TCO! –

+0

Да, проект да Винчи ориентирован на поддержку других языков, и именно здесь поддерживается прототип поддержки. – erickson

+0

Определенная оптимизация (только для хвостовой рекурсии) поддерживается IBM JVM (что-то вроде goto для начала метода) –

1

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

1

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