OpenJDK与Java HotspotVM

arv*_*ist 15 java openjdk jvm jvm-hotspot hotspot

OpenJDK VM和Oracle Hotspot VM还有两种不同的JVM吗?

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

HotSpot组由参与HotSpot虚拟机的设计,实现和维护的开发人员组成

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

Java HotSpot(TM)64位服务器VM

但在我的Ubuntu VPS上

OpenJDK 64位服务器VM

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

Bas*_*que 13

tl; dr

通过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的网站。

Oracle和OpenJDK联盟的其他成员贡献了更多的源代码,以使OpenJDK代码库完全开源,并且不受GNU GPL + linking例外以外的许可证的约束。

Oracle已更改其许可条款。在甲骨文JDK品牌产品不再是免费的成本在生产中使用。另外,您可以从超过六家供应商中的任何一家免费获得OpenJDK分发,其中包括来自Oracle的一家。有关所有详细信息,请参阅由Java社区的支柱Java Is Still Free撰写的重要白皮书。

我绘制了此流程图,以指导您选择JDK源。

指导您选择Java 11实现供应商的流程图

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

热点OpenJ9

这里的问题问:

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

如上所述,这两个产品在特征奇偶性上收敛。关于HotSpot技术,请继续阅读。

如上所述,HotSpot是Oracle JDK和OpenJDK内的一个组件。今天的HotSpot还结合了JRockit的零件。Oracle从Sun MicrosystemsBEA Systems手中收购了这两个Java引擎中最好的一个。

AdoptOpenJDK项目还使用Eclipse OpenJ9(基于J9,由IBM捐赠)提供HotJpot的替代品,以构建OpenJDK 。从AdoptOpenJDK网站下载时,可以从菜单中选择HotSpotOpenJ9

当前,测试似乎表明OpenJ9的启动速度大大加快,而占用的内存却少得多,但是HotSpot在持续使用的情况下可能运行得更快。但这对于OpenJ9来说还处于初期,因此请自己研究最新的发展。

该图表显示了HotSpot和JRockit合并的历史,以及在AdoptOpenJDK中都可用的OpenJ9


apa*_*gin 12

Oracle HotSpot JVM基于OpenJDK HotSpot项目.因此,它们大多是相同的VM,除了Oracle JVM还有一些额外的商业功能,主要是Java Flight Recorder,Application Class Data Sharing和Cooperative Memory Management.

两个VM的运行时标志几乎相同; 使用完整列表

-XX:+UnlockDiagnosticVMOptions -XX:+UnlockCommercialFeatures -XX:+PrintFlagsFinal
Run Code Online (Sandbox Code Playgroud)

从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}
Run Code Online (Sandbox Code Playgroud)