OracleJDK 和 OpenJDK 有什么区别?来看看大神的回答!

简介: 借用知乎大神RednaxelaFX的文章分享下这个问题:Oracle JDK与OpenJDK里的JVM都是HotSpot VM。从源码层面说,两者基本上是同一个东西。

借用知乎大神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只发布源码。


相关文章
|
9月前
|
Oracle Java 关系型数据库
Oracle JDK 和 OpenJDK的区别
Oracle JDK vs OpenJDK
461 0
|
Oracle Java 关系型数据库
|
Oracle Java 关系型数据库
Oracle JDK 和 OpenJDK 有什么区别?
OpenJDK是Sun在2006年末把Java开源而形成的项目,这里的“开源”是通常意义上的源码开放形式,即源码是可被复用的,例如IcedTea、UltraViolet都是从OpenJDK源码衍生出的发行版。 Oracle JDK采用了商业实现,而OpenJDK使用的是开源的FreeType。
2209 0
Oracle JDK 和 OpenJDK 有什么区别?
|
Oracle 关系型数据库 Java
深度:当IBM和Oracle改变了游戏 结成OpenJDK同盟
导读: Oracle-IBM OpenJDK 同盟对整个 Java 行业产生涟漪效应,这对于 Java 生态系统的健康发展影响如何,评论人士对此褒贬不一。纵观各种观点评述,前 JavaWorld 编辑 Athen O'Shea 的评论直达问题本质:这对于 Project Harmony、JCP 、开源的未来以及 Java 平台上的基于开放标准的开发究竟会产生什么影响。
1547 0
|
Oracle 关系型数据库 Java
将Linux默认的OpenJDK替换为Oracle JDK
在使用Logstash安装插件的时候,发生了一个错误,如下: ERROR: Something went wrong when installing logstash-input-jdbc, message: java.security.KeyException 经查可能是与系统自带的OpenJDK有关,解决方案是将系统自带的OpenJDK更新为Oracle的JDK。
2348 0
|
Java 关系型数据库 Android开发
|
16天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
56 7
|
1月前
|
Oracle 关系型数据库 数据库
|
1月前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(3)
Oracle数据库基本概念理解(3)
18 2
|
16天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
41 5

推荐镜像

更多