关于java:OracleJDK-和-OpenJDK-有什么区别来看看大牛的回答

起源: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开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞+转发哦!

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理