OpenJDK vs Java HotspotVMtl;博士 Oracle JDK & OpenJDK converging

2022-09-01 18:15:57

OpenJDK VM 和 Oracle Hotspot VM 仍然是两个不同的 JVM 吗?

我似乎找不到任何关于OpenJDK VM的官方文档。即使在OpenJDK主页上,也有一个开发HotSpot VM的HotSpot Group。

HotSpot 组由参与 HotSpot 虚拟机的设计、实现和维护的开发人员组成

但是,如果我在我的Windows机器上检查java版本,它会打印出来

Java HotSpot(TM) 64 位服务器虚拟机

但是在我的Ubuntu VPS上

OpenJDK 64 位服务器虚拟机

如果这是两个不同的 VM,它们之间的主要区别是什么?它们是否具有不同的运行时标志集?


答案 1

tl;博士

apangin接受的答案现在已经过时了。

对于Java 11等最新版本,Oracle JDK产品实际上与OpenJDK项目相同。OpenJDK现在包括Oracle以前的产品:Java Flight RecorderJava Mission ControlApplication Class-Data SharingZGC

引用 Oracle.com 博客

因此,从Java 11开始,Oracle JDK构建和OpenJDK构建将基本相同。

Oracle JDK & OpenJDK converging

Oracle在过去几年中发生了巨大的变化。

Oracle宣布他们打算将他们的品牌Oracle JDKOpenJDK融合到功能奇偶校验。两者都基于OpenJDK代码库。

为此,Oracle、Flight RecorderMission Control销售的以前商业工具现在是开源的,并捐赠给OpenJDK项目。在OpenJDK网站上看到这个这个

Oracle和OpenJDK联盟的其他成员贡献了更多的源代码,使OpenJDK代码库完全开源,不受GNU GPL+链接例外以外的许可证的阻碍。

甲骨文已经改变了他们的许可条款。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 已将管理权让渡给 RedHatIBM)。

为 Java 选择供应商的动机

HotSpot vs OpenJ9

这里的问题问:

OpenJDK VM 和 Oracle Hotspot VM 仍然是两个不同的 JVM 吗?

如上所述,这两个产品在功能奇偶校验处收敛。关于热点技术,请继续阅读。

如上所述,HotSpot是Oracle JDK和OpenJDK中的一个组件。今天的HotSpot还结合了JRockit的部分内容。Oracle合并了两个Java引擎的精华,从Sun MicrosystemsBEA Systems收购了它们。

Eclipse基金会的Adoptium项目(以前称为AdoptOpenJDK)也提供了OpenJDK的构建,使用Eclipse OpenJ9(基于J9,由IBM捐赠)作为HotSpot的替代品。从Adoptium网站下载时,您可以从菜单中选择HotSpotOpenJ9

目前,测试似乎显示OpenJ9的启动速度要快得多,同时使用更少的内存,但是如果持续使用,HotSpot可能会运行得更快。但对于OpenJ9来说,这还处于早期阶段,因此请亲自调查最新发展。

Diagram showing history of HotSpot & JRockit merging, and OpenJ9 both available in Adoptium


答案 2

Oracle HotSpot JVM基于OpenJDK HotSpot项目。因此,它们大多是相同的VM,除了Oracle JVM具有一些额外的商业功能,主要是Java Flight RecorderApplication Class Data Sharing和Colloperative Memory Management。

两个 VM 的运行时标志几乎相同。使用查看完整列表

-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}

推荐