起源:zhihu.com/question/19882320
借用知乎大神RednaxelaFX的文章分享下这个问题:
Oracle JDK与OpenJDK里的JVM都是HotSpot VM。从源码层面说,两者基本上是同一个货色。
从JDK7开始,Oracle JDK里的HotSpot VM,在研发的时候其实就是用放在OpenJDK的Mercurial代码库。也就是说跟大家从内部能实时看到的OpenJDK用的是同一个代码库。
HotSpot VM只有十分十分大量的性能没有在OpenJDK里,那局部在Oracle外部的代码库里。这些公有局部都不波及JVM的外围性能。
所以当一个Oracle员工要构建OpenJDK时,他要做的事件跟里面的人一样:从http://hg.openjdk.java.net签出代码,构建。
而当他要构建Oracle JDK时,他同样须要先从http://hg.openjdk.java.net签出OpenJDK,而后从Oracle外部的代码库签出公有的局部,放在OpenJDK代码下的一个特定目录里,而后构建。
这些HotSpot VM公有的局部次要是Java Flight Recorder的外部实现,以及还有没有公开到OpenJDK的其它平台的port,例如Oracle本人的ARM、PPC版HotSpot VM。
JDK6的代码,因为历史起因,Sun JDK6跟OpenJDK6的代码并不同步。然而其中的HotSpot VM依然是绝对统一的。OpenJDK 6里的HotSpot VM只缺了一个Oracle JDK里才有的优化,那就是-XX:+UseCompressedString。这个性能实现得不太好,没带进JDK7/OpenJDK7,所以这点差别没有也罢。
另外,Sun JDK6跟OpenJDK6在切代码的时候不肯定是在同一天,所以同一个大版本号(例如HotSpot 20.0)外面的内容可能会略微有点不一样。例子之一就是Oracle/Sun JDK6u25里有残缺的tiered compilation零碎的实现,而OpenJDK6对应的HotSpot 20.0却没蕴含这个实现;同一时间的OpenJDK7分支里的HotSpot VM又有这个性能,阐明这个性能自身并不是啥公有性能,只是OpenJDK6切代码的工夫有可能比Oracle/Sun JDK6u25早了点。
OpenJDK原是SunMicrosystems公司为Java平台构建的Java开发环境(JDK)的开源版本,齐全自在,开放源码。Sun Microsystems公司在2006年的JavaOne大会上称将对Java凋谢源代码,于2009年4月15日正式公布OpenJDK。甲骨文在2010 年收买SunMicrosystem之后接管了这个我的项目。
Oracle/Sun JDK外面蕴含的JVM是HotSpotVM,HotSpot VM只有十分十分大量的性能没有在OpenJDK里,那局部在Oracle外部的代码库里。这些公有局部都不波及JVM的外围性能。所以说,Oracle/Sun JDK与OpenJDK其实应用的是同一个代码库。
从一个Oracle外部员工的角度来看,当他要构建OracleJDK时,他同样须要先从http://hg.openjdk.java.net签出OpenJDK,而后从Oracle外部的代码库签出公有的局部,放在OpenJDK代码下的一个特定目录里,而后构建。
值得注意的是,Oracle JDK只公布二进制安装包,而OpenJDK只公布源码。
近期热文举荐:
1.1,000+ 道 Java面试题及答案整顿(2021最新版)
2.别在再满屏的 if/ else 了,试试策略模式,真香!!
3.卧槽!Java 中的 xx ≠ null 是什么新语法?
4.Spring Boot 2.5 重磅公布,光明模式太炸了!
5.《Java开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞+转发哦!
发表回复