OpenJDK 与 Java HotspotVM

OpenJDK vs Java HotspotVM

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

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

The HotSpot group is comprised of developers involved in the design, implementation, and maintanence of the HotSpot virtual machine

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

Java HotSpot(TM) 64-Bit Server VM

但是在我的 Ubuntu VPS

OpenJDK 64-Bit Server VM

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

Oracle HotSpot JVM 基于 OpenJDK HotSpot 项目。因此,它们大多是相同的 VM,除了 Oracle JVM 有一些额外的商业特性,主要是 Java Flight Recorder, Application Class Data Sharing 和协作内存管理。

两个虚拟机的运行时标志几乎相同;使用

查看完整列表
-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}

tl;博士

现已过时。

对于 Java 11 等最新版本,Oracle JDK 产品实际上与 OpenJDK 项目。 OpenJDK 现在包括 Oracle 以前的产品:Java Flight Recorder, Java Mission Control, Application Class-Data Sharing, and ZGC.

引用Oracle.com blog

From Java 11 forward, therefore, Oracle JDK builds and OpenJDK builds will be essentially identical.

Oracle JDK&开JDK收敛

甲骨文在过去几年中发生了翻天覆地的变化。

Oracle 宣布他们打算将其品牌 Oracle JDKOpenJDK 融合到 feature-parity.两者都基于 OpenJDK 代码库。

为此,Oracle 在 OpenJDK 站点上 Flight Recorder and Mission Control are now open-sourced and donated to the OpenJDK project. See this and this 出售的以前的商业工具。

Oracle 和 OpenJDK 联盟的其他成员贡献了更多源代码,使 OpenJDK 代码库完全 open-source 并且不受除 GNU GPL 以外的许可证的阻碍+链接异常。

Oracle 有 changed their licensing terms. The Oracle JDK branded product is no longer free-of-cost for use in production. Alternatively, you can get a free-of-cost distribution of OpenJDK from any of over half a dozen vendors, including one from Oracle. For all the details, see this vital white paper written by pillars of the Java community, Java Is Still Free.

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

Oracle 保留为紧急修复或安全漏洞修补其自有品牌产品的权利。但该公司表示他们也打算与其他 OpenJDK 成员一起做出贡献并进行协调。 Oracle 继续拥有 Java 商标并引领 Java 平台的未来。对于现有的 Long-Term Support (LTS) versions 8 and 11, Oracle has ceded stewardship to RedHat (IBM).

HotSpot 对比 OpenJ9

这里的问题是:

Are OpenJDK VM and Oracle Hotspot VM still two different JVMs?

如上所述,这两种产品在功能对等方面趋于一致。关于 HotSpot 技术,请继续阅读。

HotSpot 是 Oracle JDK 和 OpenJDK 中的一个组件,如上所述。今天的 HotSpot 还结合了 JRockit. Oracle merged the best of both Java engines, having acquired them from Sun Microsystems and BEA Systems.

中的部分内容

Adoptium project (formerly known as AdoptOpenJDK) from the Eclipse Foundation also provides a build of OpenJDK using Eclipse OpenJ9 (based on J9, donated by IBM) 作为 HotSpot 的替代品。从 Adoptium 网站下载时,您从菜单中选择 HotSpotOpenJ9

目前,测试似乎表明 OpenJ9 的启动速度显着加快,同时使用的内存少得多,但 HotSpot 可能 运行 在持续使用的情况下速度更快。但这仍是 OpenJ9 的早期阶段,因此请自行研究最新的发展。