来源:zhihu.com/question/19882320借用知乎大神RednaxelaFX的文章分享这个问题:OracleJDK和OpenJDK中的JVM都是HotSpotVM。从源码层面来说,两者基本是一回事。从JDK7开始,OracleJDK中的HotSpotVM实际上是使用OpenJDK中的Mercurial代码库开发的。换句话说,它使用与您可以从外部实时看到的OpenJDK相同的代码库。HotSpotVM只有非常少的功能是OpenJDK没有的,那部分是在Oracle的内部代码库中。这些私有部分都不涉及JVM的核心功能。所以当一个Oracle员工想要构建OpenJDK时,他必须和外人做同样的事情:从http://hg.openjdk.java.net中查看代码,然后构建。而当他要构建OracleJDK的时候,他也需要先从http://hg.openjdk.java.net上查出OpenJDK,然后再从Oracle的内部代码库中查出private部分,放在特定的部分OpenJDK代码目录,然后构建。这些HotSpotVM的私有部分主要是JavaFlightRecorder的内部实现,以及其他平台没有暴露OpenJDK的端口,比如Oracle自己的ARM和PPC版本的HotSpotVM。JDK6的代码,由于历史原因,SunJDK6和OpenJDK6的代码不同步。但是里面的HotSpotVM还是比较一致的。OpenJDK6中的HotSpotVM只缺少OracleJDK中的一项优化,即-XX:+UseCompressedString。这个功能没有很好的实现,也没有被JDK7/OpenJDK7带入,所以没有这个区别。另外,SunJDK6和OpenJDK6不一定是同一天砍的,所以同一个大版本号(比如HotSpot20.0)里面的内容可能会略有不同。一个例子是Oracle/SunJDK6u25有完整的分层编译系统实现,但是HotSpot20.0对应的OpenJDK6没有这个实现;同时,OpenJDK7分支中的HotSpotVM也有这个功能,说明这个功能本身并不是什么私有功能,但是OpenJDK6可能比Oracle/SunJDK6u25更早砍代码。OpenJDK最初是SunMicrosystems为Java平台构建的JavaDevelopmentEnvironment(JDK)的开源版本。它是完全免费和开源的。SunMicrosystems在2006年的JavaOne大会上宣布将Java开源,并于2009年4月15日正式发布了OpenJDK。Oracle在2010年收购SunMicrosystem后接管了该项目。Oracle/SunJDK中包含的JVM是HotSpotVM。HotSpotVM只有极少数的功能是OpenJDK没有的,那部分是在Oracle的内部代码库中。这些私有部分都不涉及JVM的核心功能。所以,Oracle/SunJDK和OpenJDK实际上使用相同的代码库。从一个Oracle内部员工的角度来说,当他要构建OracleJDK的时候,也需要先从http://hg.openjdk.java.netcheckoutOpenJDK,然后再从Oracle的内部代码库中checkoutprivatepart。将它放在OpenJDK代码下的特定目录中,然后构建它。值得注意的是,OracleJDK只发布二进制安装包,而OpenJDK只发布源代码。近期热点文章推荐:1.1,000+Java面试题及答案(2021最新版)2.别在满屏的if/else中,试试策略模式,真的很好吃!!3.操!Java中xx≠null的新语法是什么?4、SpringBoot2.5发布,深色模式太炸了!5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!
