OpenJDK VM 和 Oracle Hotspot VM 仍然是两个不同的 JVM 吗?
我似乎找不到任何有关 OpenJDK VM 的官方文档。甚至在 OpenJDK 主页上也有一个开发 HotSpot VM 的 HotSpot Group。
HotSpot 小组由参与 HotSpot 虚拟机的设计、实现和维护的开发人员组成
但是,如果我在 Windows 机器上检查 java -version,它会打印出来
Java HotSpot(TM) 64 位服务器虚拟机
但是在我的 Ubuntu VPS 上
OpenJDK 64 位服务器虚拟机
如果这是两个不同的虚拟机,它们之间的主要区别是什么?他们有不同的运行时标志集吗?
apangin接受的答案现已过时。
对于 Java 11 等最新版本,Oracle JDK 产品实际上与 OpenJDK 项目相同。 OpenJDK 现在包括 Oracle 之前的产品:Java Flight Recorder、Java Mission Control、应用程序类数据共享和ZGC。
引用Oracle.com 博客:
因此,从 Java 11 开始,Oracle JDK 构建和 OpenJDK 构建本质上是相同的。
Oracle 宣布他们打算将其品牌
Oracle JDK 与 OpenJDK 融合以实现功能对等。两者都基于 OpenJDK 代码库。
为此,Oracle 以前销售的商业工具Flight Recorder 和 Mission Control 现已开源并捐赠给 OpenJDK 项目。请参阅 OpenJDK 站点上的 this 和 this。
Oracle 和 OpenJDK 联盟的其他成员贡献了更多源代码,使 OpenJDK 代码库完全开源,并且不受 GNU GPL+ 链接例外之外的许可证的阻碍。Oracle 已
更改了其许可条款。 Oracle JDK 品牌产品不再免费用于生产。或者,您可以从六家以上供应商中的任何一家获得 OpenJDK 的免费发行版,其中包括来自 Oracle 的供应商。有关所有详细信息,请参阅由 Java 社区支柱撰写的重要白皮书,Java 仍然免费。
我画了这个流程图来指导您选择 JDK 源。Oracle 保留为紧急修复或安全漏洞修补其自有品牌产品的权利。但该公司已表示他们也打算与其他 OpenJDK 成员做出贡献并进行协调。 Oracle 继续拥有 Java 商标并引领 Java 平台的未来。对于现有的
长期支持 (LTS) 版本 8 和 11,Oracle 已将 管理权让给 RedHat (IBM)。
OpenJDK VM 和 Oracle Hotspot VM 仍然是两个不同的 JVM 吗?如上所述,这两种产品在功能上趋于一致。关于 HotSpot 是 Oracle JDK 和 OpenJDK 中的一个组件,如上所述。今天的 HotSpot 还结合了
JRockit 的部分。 Oracle 从 Sun Microsystems 和 BEA Systems 收购了这两个 Java 引擎,合并了它们的优点。 Eclipse 基金会的
Adoptium 项目(以前称为 AdoptOpenJDK)还提供了使用 Eclipse OpenJ9(基于 J9,由 IBM 捐赠)构建的 OpenJDK 作为 HotSpot 的替代方案。从 Adoptium 网站下载时,您可以从菜单中选择 HotSpot 或 OpenJ9。 目前,测试似乎表明 OpenJ9 在使用更少内存的情况下启动速度显着加快,但如果持续使用,HotSpot 可能会运行得更快。但对于 OpenJ9 来说,现在还处于早期阶段,因此请自行研究最新进展。
、应用程序类数据共享和协作内存管理。 两个虚拟机的运行时标志几乎相同;使用
查看完整列表-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}