vlambda博客
学习文章列表

知乎高赞:从源码层,拆解OracleJDK和OpenJDK有什么区别?网友:不愧是大神的回答~

大家好,我是D哥

知乎高赞:从源码层,拆解OracleJDK和OpenJDK有什么区别?网友:不愧是大神的回答~
Java面试那些事儿
回复关键字Java,领取大厂最新面试题和简历模板。同时还可以与30w+程序员一起学习技术干货,包括JVM、Spring Cloud、Intellij IDEA、Dubbo、Zookeeper、Redis、架构设计、微服务、Git等。
244篇原创内容
Official Account
来源:https://www.zhihu.com/question/19882320

借用知乎大神RednaxelaFX的文章分享下这个问题


Oracle JDK与OpenJDK里的JVM都是HotSpot VM。从源码层面说,两者基本上是同一个东西。


从JDK7开始,Oracle JDK里的HotSpot VM,在研发的时候其实就是用放在OpenJDK的Mercurial代码库。也就是说跟大家从外部能实时看到的OpenJDK用的是同一个代码库。




而当他要构建Oracle JDK时,他同样需要先从http://hg.openjdk.java.net签出OpenJDK,然后从Oracle内部的代码库签出私有的部分,放在OpenJDK代码下的一个特定目录里,然后构建。


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早了点。



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只发布源码。



知乎高赞:从源码层,拆解OracleJDK和OpenJDK有什么区别?网友:不愧是大神的回答~技术交流群知乎高赞:从源码层,拆解OracleJDK和OpenJDK有什么区别?网友:不愧是大神的回答~

有不少同学问D哥,大厂面试官到底喜欢问什么?想进大厂镀金。因此,D哥特意邀请了华为、腾讯、阿里的朋友进群,与大家一起交流经验,增长技术。

有兴趣入群的同学,可长按扫描下方二维码,一定要备注:城市+昵称+技术方向,根据格式备注,可更快被通过且邀请进群。

知乎高赞:从源码层,拆解OracleJDK和OpenJDK有什么区别?网友:不愧是大神的回答~

▲长按扫描



知乎高赞:从源码层,拆解OracleJDK和OpenJDK有什么区别?网友:不愧是大神的回答~热门推荐


   
     
     
   




知乎高赞:从源码层,拆解OracleJDK和OpenJDK有什么区别?网友:不愧是大神的回答~