OpenJDK虚拟机和Oracle热点虚拟机仍然是两个不同的JVM吗?
我似乎找不到任何关于OpenJDK VM的官方文档。即使在OpenJDK主页中,也有一个开发HotSpot VM的HotSpot组。
HotSpot组由参与HotSpot虚拟机的设计、实现和维护的开发人员组成
然而,如果我在我的Windows机器上检查java版本,它就会打印出来
Java热点(TM)64位服务器虚拟机
但是在我的Ubuntu VPS上
OpenJDK 64位服务器虚拟机
如果这是两个不同的VM,它们之间的主要区别是什么?它们有不同的运行时标志集吗?
Oracle HotSpot JVM基于OpenJDK HotSpot项目。因此,它们基本上都是相同的VM,只是Oracle JVM有一些额外的商业特性,主要是Java飞行记录器、应用程序类数据共享和协作内存管理。
两个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}
阿潘金接受的答案现在已经过时了。
对于Java 11等最新版本,Oracle JDK产品实际上与OpenJDK项目相同。OpenJDK现在包括Oracle以前的产品:Java飞行记录器、Java任务控制、应用程序类数据共享和ZGC。
引用Oracle.com博客:
因此,从Java11开始,Oracle JDK构建和OpenJDK构建将基本相同。
甲骨文在过去的几年里发生了巨大的变化。
甲骨文宣布他们打算将他们的品牌甲骨文JDK与OpenJDK融合到功能对等。两者都基于OpenJDK代码库。
为此,甲骨文、飞行记录仪和任务控制公司以前出售的商业工具现在已经开源并捐赠给OpenJDK项目。在OpenJDK站点上看到这个和这个。
Oracle和OpenJDK联盟的其他成员贡献了更多的源代码,使OpenJDK代码库完全开源,不受GNU GPL链接例外之外的许可证的限制。
甲骨文已经改变了他们的许可条款。Oracle JDK品牌产品在生产中不再免费使用。或者,您可以从超过六家供应商中的任何一家免费获得OpenJDK,其中包括一家来自Oracle的供应商。有关所有详细信息,请参阅Java社区支柱撰写的这篇重要白皮书,Java仍然是免费的。
我绘制了这个流程图来指导您选择JDK源。
Oracle保留为紧急修复或安全漏洞修补自己品牌产品的权利。但该公司表示,他们也打算做出贡献,并与其他OpenJDK成员进行协调。甲骨文继续拥有Java商标,并引领Java平台的未来。对于现有的长期支持(LTS)版本8和11,Oracle已经将管理工作交给了RedHat(IBM)。
这里的问题是:
OpenJDK虚拟机和Oracle热点虚拟机仍然是两个不同的JVM吗?
如上所述,这两个产品在特征奇偶性上会合。关于热点技术,请继续阅读。
HotSpot是Oracle JDK和OpenJDK中的一个组件,如上所述。今天的HotSpot还结合了JRockit的部分。甲骨文从太阳微系统公司和东亚系统公司收购了这两个Java引擎中的佼佼者。
Eclipse基金会的ApvestProject(以前称为AptoPopeJDK)还提供了一个使用Eclipse OpenJ9(基于J9,由IBM捐赠)作为热点选择的OpenJDK的构建。从Adoptium网站下载时,您可以从菜单中选择HotSpot或OpenJ9。
目前,测试似乎显示OpenJ9在使用更少内存的情况下启动速度快得多,但是HotSpot在持续使用的情况下运行速度可能会更快。但是对于OpenJ9来说,这还为时尚早,所以请自己调查最新的进展。