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

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

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

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

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

8 ответов

Решение

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

Стирание типа является функцией компилятора и, как таковая, не зависит от JVM.

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

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

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

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


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

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

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

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

Другие вопросы по тегам