作者 | 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是一致的。

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

# 什么是OpenJDK?

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

# JDK和OpenJDK的区别

1.授权协议的不同

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

2.OpenJDK只包含最精简的JDK

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

3.OpenJDK源代码不完整

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

4.OpenJDK和IcedTea的关系

IcedTea项目最初是由于OpenJDK不完整(因产权 而造成的障碍)而创立的,社区需要
一个完整的开源工具链及代码库。
IcedTea长期以来一直是OpenJDK的一套补丁,正如刚才我所说到的,它有一个 基于
“./configure”的不同的构建系统。
在OpenJDK中,我们已经替换了产权代码(encumbered code),因此不再有障碍了。
正因为我们的努力,IcedTea项目已经减少了使用补丁的数量。
IcedTea中看上去不错的一点是,它的 configure脚本使得在多种不同的模式下构建
OpenJDK变得很容易,比如使用Zero Assembler Port在非x86/sparc芯片上来支持编译
等等。
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面试题汇总篇(附答案)

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

朕已阅 

面试官 | Oracle JDK 和 OpenJDK 有什么区别?相关推荐

  1. Oracle JDK和 OpenJDK 之间的区别

    1. 简介 在本文中,我们将探讨Oracle Java Development Kit和OpenJDK之间的差异.我们先快速浏览一下,然后进行比较.之后,我们将看到其他JDK实现的列表. 2. Ora ...

  2. Oracle JDK 和 OpenJDK 有什么区别?

    OpenJDK是Sun在2006年末把Java开源而形成的项目,这里的"开源 "是通常意义上的源码开放形式,即源码是可被复用的,例如IcedTea.UltraViolet都是从Op ...

  3. Java常见面试题:Oracle JDK 和 OpenJDK 的区别?

    Oracle JDK 和 OpenJDK 的区别? 可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK.那么Oracle和OpenJDK之间是否存在重大差异?下面我通过收集到的一些资 ...

  4. oracle jdk什么意思,Oracle JDK和OpenJDK之间的区别是什么?

    Oracle JDK和OpenJDK之间有什么区别?下面本篇文章就来给大家介绍一下Oracle JDK和OpenJDK之间的区别是什么,希望对大家有所帮助.[视频教程推荐:Java教程] Oracle ...

  5. 面试官:this和super有什么区别?this能调用到父类吗?

    作者:磊哥 来源 | Java面试真题解析(ID:aimianshi666) 转载请联系授权(微信ID:GG_Stone) 本文已收录<Java常见面试题>:https://gitee.c ...

  6. nodejs express use 传值_再也不怕面试官问你express和koa的区别了

    前言 用了那么多年的express.js,终于有时间来深入学习express,然后顺便再和koa2的实现方式对比一下. 老实说,还没看express.js源码之前,一直觉得express.js还是很不 ...

  7. jdk开发文档_【第9期】面试官:JDK、JRE、JVM 三者什么关系?

    这个题目在面试题中基本没怎么出现,但在笔试题中倒是经常见到.所以还是有必要拉出来溜溜~ JDK: java development kit, java开发工具包,用来开发Java程序的,针对java开 ...

  8. 【方向盘】逐渐碎片化的Java生态圈:Oracle JDK、OpenJDK、阿里Dragonwell、华为毕昇

    Oracle JDK开始收费后,我们还能用什么? 本文已被https://yourbatman.cn收录:女娲Knife-Initializr工程可公开访问啦:程序员专用网盘https://wangp ...

  9. 面试官:react和vue有什么区别吗?

    前言 大家好呀,清明节这两天有没有出门踏青扫墓呢!!! 言归正传,这是作者面试系列的第二篇文章!!!!!!! react和vue是什么?有啥区别吗? 三大框架之二,大家应该都不会陌生,都有学习过或者开 ...

最新文章

  1. 5 加盐_洗花甲时,别只放盐了!老渔民教您一招,5分钟就搞定,太省事了
  2. Android Studio开发配置NDK环境
  3. 求助:国际化中资源文件不在classpath中的问题
  4. Oracle connet by prior 关键字的简单介绍和用法
  5. 计算机二级没过学校不给学位证,如果学校说计算机二级没过不给发学位证改怎么办...
  6. M1支持 Accusonus ERA Bundle for mac(音频降噪消除去混音插件包)
  7. 通过shell访问hive_Spark入门:连接Hive读写数据(DataFrame)
  8. 计算机应用基础员工工资表,利用VBA编写Excel中的工资条与工资查询窗口
  9. 生物医学信号处理之数字信号处理基础
  10. 中国区块链专利数量全球第一 BAT专利数稳居世界20强
  11. 无刷直流电机驱动系统:组成结构及其控制原理
  12. 计算机开机只显示桌面不显示图标,电脑开机后只有桌面背景不显示图标怎么办...
  13. Spark作业提交流程
  14. 尚学堂视频笔记五:IO流
  15. JQ设置cookie(3分钟搞定)
  16. 无忧·企业文档自助配置完成单点登录配置,对接企业原有组织架构
  17. SLAM的数学基础(3):几种常见的概率分布的实现及验证
  18. Android Studio 控制台 log不显示解决
  19. php 远程读取excel,PHP远程读取excel文件,如何读取?
  20. 五、python实现人工蜂群算法(简单明了版)

热门文章

  1. 通过脚本启动批量服务
  2. 日常问题———安装新版zookeeper 出现Starting zookeeper ... FAILED TO START
  3. 我的这套VuePress主题你熟悉吧
  4. 中国信通院金融科技负责人韩涵:大数据是生产资料的变革,区块链是生产关系的变革...
  5. AI造福设计师:搭配色板这种苦差事交给GAN就好啦(教程)
  6. [C#学习] DataAdapter.Fill()分页
  7. zabbix的agent端的主动模式关键三个参数
  8. 自定义控件---重写Listbox实现item图标变换和item点击事件
  9. JavaScript--变量、作用域及内存(12)
  10. 详解UML中的聚合,关联,泛化等关系