面试官 | Oracle JDK 和 OpenJDK 有什么区别?

深碍√TFBOYSˉ_ 2023-10-06 11:25 105阅读 0赞

format_png

作者 | petercao

来源 | urlify.cn/yAn6ru

OpenJDK是Sun在2006年末把Java开源而形成的项目,这里的“开源”是通常意义上的源码开放形式,即源码是可被复用的,例如IcedTea、UltraViolet都是从OpenJDK源码衍生出的发行版。

Oracle JDK采用了商业实现,而OpenJDK使用的是开源的FreeType。当然,“相同”是建立在两者共有的组件基础上的,Oracle JDK中还会存在一些Open JDK没有的、商用闭源的功能,例如从JRockit移植改造而来的Java Flight Recorder。预计以后JRockit的MissionControl移植到HotSpot之后,也会以Oracle JDK专有、闭源的形式提供。

Oracle的项目发布经理Joe Darcy在OSCON 2011上对两者关系的介绍也证实了OpenJDK 7和Oracle JDK 7在程序上是非常接近的,两者共用了大量相同的代码(如下图,注意图中提示了两者共同代码的占比要远高于图形上看到的比例),所以我们编译的OpenJDK,基本上可以认为性能、功能和执行逻辑上都和官方的Oracle JDK是一致的。

format_png 1

在大多数LINUX发行版本里,内置或者通过软件源安装的JDK,都是安装的OpenJDK。

# 什么是OpenJDK?

  1. 历史上的原因是,OpenJDKJDK的开放源码版本,以GPL协议的形式发布。
  2. General Public License
  3. JDK7的时候,OpenJDK已经成为JDK7的主干开发版,SUN JDK7是在OpenJDK7
  4. 基础上发布的,其大部分源码都相同,只有少部分源码被替换掉。
  5. 使用JRL(Java Research LicenseJava研究授权协议)发布。
  6. 至于OpenJDK6则更是有其复杂的一面,首先是OpenJDK6JDK7的一个分支,并且尽量去除Java SE7的新特性,使其尽量的符合Java6的标准。

#

# JDK和OpenJDK的区别

1.授权协议的不同

  1. OpenJDK采用GPL V2协议发布,而JDK则采用JRL协议发布。
  2. 两个协议虽然都是开放源代码的,但是在使用上的不同在于GPL V2允许在商业上使用,
  3. JRL只允许个人研究使用。

2.OpenJDK只包含最精简的JDK

OpenJDK不包含其他的软件包,比如Rhino Java DB JAXP……,并且可以分离的软件包也都是尽量的分离,但是这大多数都是自由软件,你可以自己下载加入。

3.OpenJDK源代码不完整

  1. 这个很容易想到,在采用GPL协议的OpenJDK中,SUN JDK的一部分源代码因为产权
  2. 的问题无法开放OpenJDK使用,其中最主要的部分就是JMX中的可选元件SNMP部分
  3. 的代码。
  4. 因此这些不能开放的源代码将它作成plug,以供OpenJDK编译时使用,你也可以选择
  5. 不要使用plug
  6. Icedtea则为这些不完整的部分开发了相同功能的源代码(OpenJDK6),促使
  7. OpenJDK更加完整。

4.OpenJDK和IcedTea的关系

  1. IcedTea项目最初是由于OpenJDK不完整(因产权 而造成的障碍)而创立的,社区需要
  2. 一个完整的开源工具链及代码库。
  3. IcedTea长期以来一直是OpenJDK的一套补丁,正如刚才我所说到的,它有一个 基于
  4. “./configure”的不同的构建系统。
  5. OpenJDK中,我们已经替换了产权代码(encumbered code),因此不再有障碍了。
  6. 正因为我们的努力,IcedTea项目已经减少了使用补丁的数量。
  7. IcedTea中看上去不错的一点是,它的 configure脚本使得在多种不同的模式下构建
  8. OpenJDK变得很容易,比如使用Zero Assembler Port在非x86/sparc芯片上来支持编译
  9. 等等。
  10. IcedTea提供的一大块内容是plugin/java-web-start基础架构。

5.部分源代码用开源代码替换

由于产权的问题,很多是SUN JDK的源代码被替换成一些功能相同的开源代码,比如说字体栅格化引擎,使用Free Type代替。

6.不能使用Java商标

这个很容易理解,在安装OpenJDK的机器上,输入“java -version”显示的是OpenJDK,但是如果是使用Icedtea补丁的OpenJDK,显示的是java。

(未验证)

# 参考

Google Guava官方教程(中文版)
http://ifeve.com/google-guava/

Guava: Google Core Libraries for Java

Guava src and api doc:
https://github.com/google/guava
https://google.github.io/guava/releases/snapshot-jre/api/docs/

【END】

近期热文

  • 面试珍藏:最常见的200多道Java面试题
  • 被一个熟悉的面试题问懵了:String…
  • 面试官:如何实现幂等性校验?
  • 年终盘点 | 2019年Java面试题汇总篇(附答案)

关注下方二维码,订阅更多精彩内容

format_png 2

朕已阅 format_png 3

发表评论

表情:
评论列表 (有 0 条评论,105人围观)

还没有评论,来说两句吧...

相关阅读