OpenJDK与Java HotspotVM的比较

28

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

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

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

但是,如果我在Windows机器上检查java -version,它会输出

Java HotSpot(TM) 64-Bit Server VM

但是,在我的Ubuntu VPS上

OpenJDK 64-Bit Server VM

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


2
可能是《JVM和HotSpot之间的区别?》的重复问题。 - Dmitriy
2
这个问题在2014年就得到了回答。 最新的答案来自于2015年,其中指向维基百科列出所有JVM实现的列表。在维基百科中,它说OpenJDK作为(JDK)包含HotSpot虚拟机。但我正在寻找一些官方文件、文章或除了维基百科以外的任何东西。 - arvist
2
Openjdk是Java的开源基础。Oracle Java是openjdk重新打包并附加了额外功能的产品。 - Thorbjørn Ravn Andersen
@ataurenis 我不确定你对源代码的不满是否会改变它基本上是相同的问题。毕竟,额外的答案也可以在那里添加。 - the8472
1
有一些组件并未被许可在 openjdk 中使用。据推测, openjdk 可能使用了开源替代品,或者这些组件仅用于不属于公共 API 的功能。 - the8472
1
相关:为什么要使用OpenJDK? - Basil Bourque
2个回答

52

简短概括

apangin的回答已经过时。

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

引用Oracle.com博客的话:

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

Oracle JDKOpenJDK趋同

在过去的几年里,Oracle进行了重大改变。

Oracle宣布他们打算将品牌化的Oracle JDKOpenJDK趋同到功能完全相同的程度。两者都基于OpenJDK代码库。

为此,Oracle曾经销售的商业工具Flight RecorderMission Control现在已经开源并捐赠给OpenJDK项目。请参阅OpenJDK网站上的thisthis
Oracle和其他OpenJDK联盟成员贡献了更多的源代码,使OpenJDK代码库完全开源,不受GNU GPL+链接例外以外的许可证限制。
Oracle已经更改了他们的许可协议。Oracle JDK品牌产品在生产中不再免费使用。相反,您可以从包括Oracle在内的十几个供应商中获得OpenJDK的免费发行版。有关详细信息,请参见Java社区支柱撰写的这份重要白皮书Java Is Still Free
我制作了这张流程图来指导您选择JDK源。

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

Oracle保留修补其自有品牌产品的权利以进行紧急修复或安全漏洞。但该公司已经表明了他们也打算与其他OpenJDK成员贡献和协调。Oracle继续拥有Java商标并引领Java平台的未来。对于现有的长期支持(LTS)版本8和11,Oracle已将管理权委托给RedHat(IBM)。

Motivations in choosing a vendor for Java

HotSpot versus OpenJ9

这里的问题是:

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

如上所述,这两个产品正在功能平等方面趋于融合。关于HotSpot技术,请继续阅读。

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

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

目前的测试结果显示,使用OpenJ9启动速度显著更快,且占用内存更少。但在持续使用方面,HotSpot可能会更快。不过,对于OpenJ9来说,现在还处于早期阶段,建议自行了解最新进展。

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


很好的答案!只想补充一点,Eclipse Foundation已经从Oracle获得了Adoptium的TCK。请参考 https://projects.eclipse.org/proposals/eclipse-temurin-compliance。 - Alejandro Duarte

14

Oracle HotSpot JVM是基于OpenJDK HotSpot项目的。因此,它们大部分是相同的虚拟机,只是Oracle JVM有一些额外的商业功能,主要包括Java Flight Recorder应用程序类数据共享和协同内存管理。

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

1
如果你在谈论商业功能和打印标志,那么添加"make unlockcommercialfeatures"是有意义的吗? - the8472
如果您不介意的话,请看一下这个后续问题 - einpoklum
更新:Oracle已经开源了商业特性,例如Java Flight Recorder和Mission Control,并将它们移交给OpenJDK项目。Oracle宣布他们自己的Oracle品牌Java实现将与OpenJDK保持功能平衡。 - Basil Bourque

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接