OpenJDK против Java HotspotVM

Являются ли OpenJDK VM и Oracle Hotspot VM еще двумя разными JVM?

Я не могу найти какую-либо официальную документацию по поводу OpenJDK VM. Даже на главной странице OpenJDK есть группа HotSpot, которая разрабатывает VM HotSpot.

Группа HotSpot состоит из разработчиков, участвующих в разработке, внедрении и поддержке виртуальной машины HotSpot

Однако, если я проверю java -version на моей машине Windows, он распечатает

64-разрядная серверная виртуальная машина Java HotSpot (TM)

Но на моем Ubuntu VPS

64-разрядная серверная версия OpenJDK

Если это две разные виртуальные машины, каковы основные различия между ними? Есть ли у них разные фреймы времени выполнения?

Ответ 1

Oracle HotSpot JVM основан на проекте OpenJDK HotSpot. Таким образом, они в основном являются одной и той же виртуальной машиной, за исключением того, что у Oracle JVM есть несколько дополнительных коммерческих функций, в основном, Java Flight Recorder, Data Class Data Sharing и Cooperative Memory Management.

Флаги времени выполнения для обеих виртуальных машин практически одинаковы; см. полный список, используя

-XX:+UnlockDiagnosticVMOptions -XX:+UnlockCommercialFeatures -XX:+PrintFlagsFinal

Начиная с JDK 8u131, единственное различие заключается в следующих флагах (отсутствующих в OpenJDK VM):

 bool EnableResourceManagementTLABCache         = true         {product}
 bool EnableSharedLookupCache                   = true         {product}
 bool FlightRecorder                            = false        {commercial}
ccstr FlightRecorderOptions                     =              {product}
 bool LogCommercialFeatures                     = false        {product}
ccstr MemoryRestriction                         = none         {commercial}
 bool ResourceManagement                        = false        {commercial}
 intx ResourceManagementSampleInterval          = -1           {commercial}
ccstr StartFlightRecording                      =              {commercial}
 bool TraceSharedLookupCache                    = false        {product}
 bool UnlockCommercialFeatures                 := true         {commercial}
 bool UseAppCDS                                 = false        {commercial}

Ответ 2

ТЛ; др

Принятый ответ от apangin теперь устарел.

Для последних версий, таких как Java 11, продукт Oracle JDK практически идентичен проекту OpenJDK. OpenJDK теперь включает в себя предыдущие предложения Oracle: Java Flight Recorder, Java Mission Control, Обмен данными между классами приложений и ZGC.

Цитировать блог Oracle.com:

Следовательно, начиная с Java 11, сборки Oracle JDK и сборки OpenJDK будут практически идентичны.

Oracle JDK & OpenJDK сходится

В Oracle произошли кардинальные изменения за последние пару лет.

Oracle объявила о своем намерении объединить свой фирменный Oracle JDK с OpenJDK для обеспечения функционального контроля. Оба основаны на кодовой базе OpenJDK.

С этой целью ранее коммерческие инструменты, продаваемые Oracle, Flight Recorder и Mission Control, теперь с открытым исходным кодом и пожертвованы для проекта OpenJDK. Смотрите это и это на сайте OpenJDK.

Oracle и другие члены консорциума OpenJDK предоставили еще больше исходного кода, чтобы сделать кодовую базу OpenJDK полностью открытым исходным кодом и не обремененной лицензиями, кроме исключения связывания GNU GPL +.

Oracle изменила условия лицензирования. Продукт под брендом Oracle JDK больше не является бесплатным для использования в производстве. в качестве альтернативы вы можете получить бесплатный дистрибутив OpenJDK от любого из более чем полдюжины поставщиков, включая одного из Oracle. Подробности можно найти в этом важном документе, написанном столпами сообщества Java: Java все еще бесплатна.

Я нарисовал эту блок-схему, чтобы помочь вам в выборе источника JDK.

Flowchart guiding you in choosing a vendor for a Java 11 implementation

Oracle оставляет за собой право исправлять свой собственный фирменный продукт для срочного исправления или уязвимости безопасности. Но компания заявила о своем намерении также внести свой вклад и координировать с другими членами OpenJDK. Oracle продолжает владеть товарными знаками Java и вести будущее платформы Java. Для существующих долгосрочной поддержки (LTS) версий 8 и 11 Oracle передала управление RedHat (IBM).

HotSpot против OpenJ9

Вопрос здесь задает:

Являются ли OpenJDK VM и Oracle Hotspot VM еще двумя разными JVM?

Как обсуждалось выше, эти два продукта сходятся в паритете функций. Что касается технологии HotSpot, читайте дальше.

HotSpot является одним из компонентов в Oracle JDK и OpenJDK, как обсуждалось выше. Сегодняшний HotSpot также объединяет детали из JRockit. Oracle объединила лучшие из двух движков Java, приобретя их у Sun Microsystems и BEA Systems.

Проект AdoptOpenJDK также предоставляет сборку OpenJDK с использованием Eclipse OpenJ9 (на основе J9, подаренного IBM) в качестве альтернативы HotSpot. При загрузке с веб-сайта AdoptOpenJDK вы выбираете из меню либо HotSpot, либо OpenJ9.

В настоящее время тесты показывают, что OpenJ9 значительно быстрее запускается при гораздо меньшем объеме памяти, но HotSpot может работать быстрее при длительном использовании. Но это все еще первые дни для OpenJ9, так что изучите для себя последние разработки.

Chart showing history of HotSpot & JRockit merging, and OpenJ9 both available in AdoptOpenJDK