面试官 | Oracle JDK 和 OpenJDK 有什么区别?
作者 | 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 有什么区别?相关推荐
- Oracle JDK和 OpenJDK 之间的区别
1. 简介 在本文中,我们将探讨Oracle Java Development Kit和OpenJDK之间的差异.我们先快速浏览一下,然后进行比较.之后,我们将看到其他JDK实现的列表. 2. Ora ...
- Oracle JDK 和 OpenJDK 有什么区别?
OpenJDK是Sun在2006年末把Java开源而形成的项目,这里的"开源 "是通常意义上的源码开放形式,即源码是可被复用的,例如IcedTea.UltraViolet都是从Op ...
- Java常见面试题:Oracle JDK 和 OpenJDK 的区别?
Oracle JDK 和 OpenJDK 的区别? 可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK.那么Oracle和OpenJDK之间是否存在重大差异?下面我通过收集到的一些资 ...
- oracle jdk什么意思,Oracle JDK和OpenJDK之间的区别是什么?
Oracle JDK和OpenJDK之间有什么区别?下面本篇文章就来给大家介绍一下Oracle JDK和OpenJDK之间的区别是什么,希望对大家有所帮助.[视频教程推荐:Java教程] Oracle ...
- 面试官:this和super有什么区别?this能调用到父类吗?
作者:磊哥 来源 | Java面试真题解析(ID:aimianshi666) 转载请联系授权(微信ID:GG_Stone) 本文已收录<Java常见面试题>:https://gitee.c ...
- nodejs express use 传值_再也不怕面试官问你express和koa的区别了
前言 用了那么多年的express.js,终于有时间来深入学习express,然后顺便再和koa2的实现方式对比一下. 老实说,还没看express.js源码之前,一直觉得express.js还是很不 ...
- jdk开发文档_【第9期】面试官:JDK、JRE、JVM 三者什么关系?
这个题目在面试题中基本没怎么出现,但在笔试题中倒是经常见到.所以还是有必要拉出来溜溜~ JDK: java development kit, java开发工具包,用来开发Java程序的,针对java开 ...
- 【方向盘】逐渐碎片化的Java生态圈:Oracle JDK、OpenJDK、阿里Dragonwell、华为毕昇
Oracle JDK开始收费后,我们还能用什么? 本文已被https://yourbatman.cn收录:女娲Knife-Initializr工程可公开访问啦:程序员专用网盘https://wangp ...
- 面试官:react和vue有什么区别吗?
前言 大家好呀,清明节这两天有没有出门踏青扫墓呢!!! 言归正传,这是作者面试系列的第二篇文章!!!!!!! react和vue是什么?有啥区别吗? 三大框架之二,大家应该都不会陌生,都有学习过或者开 ...
最新文章
- 5 加盐_洗花甲时,别只放盐了!老渔民教您一招,5分钟就搞定,太省事了
- Android Studio开发配置NDK环境
- 求助:国际化中资源文件不在classpath中的问题
- Oracle connet by prior 关键字的简单介绍和用法
- 计算机二级没过学校不给学位证,如果学校说计算机二级没过不给发学位证改怎么办...
- M1支持 Accusonus ERA Bundle for mac(音频降噪消除去混音插件包)
- 通过shell访问hive_Spark入门:连接Hive读写数据(DataFrame)
- 计算机应用基础员工工资表,利用VBA编写Excel中的工资条与工资查询窗口
- 生物医学信号处理之数字信号处理基础
- 中国区块链专利数量全球第一 BAT专利数稳居世界20强
- 无刷直流电机驱动系统:组成结构及其控制原理
- 计算机开机只显示桌面不显示图标,电脑开机后只有桌面背景不显示图标怎么办...
- Spark作业提交流程
- 尚学堂视频笔记五:IO流
- JQ设置cookie(3分钟搞定)
- 无忧·企业文档自助配置完成单点登录配置,对接企业原有组织架构
- SLAM的数学基础(3):几种常见的概率分布的实现及验证
- Android Studio 控制台 log不显示解决
- php 远程读取excel,PHP远程读取excel文件,如何读取?
- 五、python实现人工蜂群算法(简单明了版)
热门文章
- 通过脚本启动批量服务
- 日常问题———安装新版zookeeper 出现Starting zookeeper ... FAILED TO START
- 我的这套VuePress主题你熟悉吧
- 中国信通院金融科技负责人韩涵:大数据是生产资料的变革,区块链是生产关系的变革...
- AI造福设计师:搭配色板这种苦差事交给GAN就好啦(教程)
- [C#学习] DataAdapter.Fill()分页
- zabbix的agent端的主动模式关键三个参数
- 自定义控件---重写Listbox实现item图标变换和item点击事件
- JavaScript--变量、作用域及内存(12)
- 详解UML中的聚合,关联,泛化等关系