OpenJDK 与 Java HotspotVM

问题描述 投票:0回答:2

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 位服务器虚拟机

如果这是两个不同的虚拟机,它们之间的主要区别是什么?他们有不同的运行时标志集吗?

java jvm jvm-hotspot
2个回答
53
投票

tl;博士

apangin接受的答案现已过时。

对于 Java 11 等最新版本,

Oracle JDK 产品实际上与 OpenJDK 项目相同。 OpenJDK 现在包括 Oracle 之前的产品:Java Flight RecorderJava Mission Control应用程序类数据共享ZGC

引用

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 品牌产品不再免费用于生产。或者,您可以从六家以上供应商中的任何一家获得 OpenJDK 的免费发行版,其中包括来自 Oracle 的供应商。有关所有详细信息,请参阅由 Java 社区支柱撰写的重要白皮书,Java 仍然免费

我画了这个流程图来指导您选择 JDK 源。

Oracle 保留为紧急修复或安全漏洞修补其自有品牌产品的权利。但该公司已表示他们也打算与其他 OpenJDK 成员做出贡献并进行协调。 Oracle 继续拥有 Java 商标并引领 Java 平台的未来。对于现有的

长期支持 (LTS) 版本 8 和 11,Oracle 已将 管理权让给 RedHat (IBM)。

HotSpotOpenJ9

这里的问题是:

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

如上所述,这两种产品在功能上趋于一致。关于

HotSpot 技术,请继续阅读。

HotSpot 是 Oracle JDK 和 OpenJDK 中的一个组件,如上所述。今天的 HotSpot 还结合了

JRockit 的部分。 Oracle 从 Sun MicrosystemsBEA Systems 收购了这两个 Java 引擎,合并了它们的优点。 Eclipse 基金会的

Adoptium 项目(以前称为 AdoptOpenJDK)还提供了使用 Eclipse OpenJ9(基于 J9,由 IBM 捐赠)构建的 OpenJDK 作为 HotSpot 的替代方案。从 Adoptium 网站下载时,您可以从菜单中选择 HotSpotOpenJ9 目前,测试似乎表明 OpenJ9 在使用更少内存的情况下启动速度显着加快,但如果持续使用,HotSpot 可能会运行得更快。但对于 OpenJ9 来说,现在还处于早期阶段,因此请自行研究最新进展。


14
投票
Java Flight Recorder

应用程序类数据共享和协作内存管理。 两个虚拟机的运行时标志几乎相同;使用

查看完整列表

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

© www.soinside.com 2019 - 2024. All rights reserved.