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协议的形式发布。开源协议参考:软件开发中的开源协议详解
在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 JavaGuava src and api doc:
https://github.com/google/guava
https://google.github.io/guava/releases/snapshot-jre/api/docs/
来源:https://www.cnblogs.com/bluestorm/p/8965656.html

Oracle JDK 和 OpenJDK 有什么区别?的更多相关文章

  1. 你安装的是SUN/Oracle JDK还是OpenJDK?

    目录 1 如何查看你安装的JDK版本 1.1 要用到的命令行工具 1.2 查看JDK的版本 2 什么是 OpenJDK 2.1 OpenJDK 的来历 2.2 Oracle JDK的来历 3 Orac ...

  2. [转帖]SUN/Oracle JDK还是OpenJDK?

    你安装的是 https://www.cnblogs.com/shoufeng/p/9719995.html 目录 1 如何查看你安装的JDK版本 1.1 要用到的命令行工具 1.2 查看JDK的版本 ...

  3. oracle jdk和openjdk区别;idea如何加载jdk源码并调试jdk代码

    两个jdk的区别 oracle jdk是sun/oracle(甲骨文)公司的,部分jdk开源:相对比较稳定,使用的比较多. openjdk是完全开源的,据说是官方oracle唯一承认的开源版本. id ...

  4. Oracle JDK vs OpenJDK

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

  5. Oracle JDK与OpenJDK到底有什么不同?

    ​不知道各位developer平时是否有过疑问,Oracle JDK是什么,OpenJDK又是什么? Oracle JDK便是平常我们在windows系统上做开发使用的JDK,又称作SUN JDK.O ...

  6. Linux安装Oracle JDK替换OpenJDK详解

    转自http://www.lsychina.com/howto_install_oracle-jdk_replace_openjdk_on_linux.html 众所周知,由于Oracle公司的JDK ...

  7. centos7 安装oracle jdk 与openjdk 实现切换

    1. 分别安装oraclejdk 与openjdk #下载安装oraclejdk rpm -ivh --prefix=/usr.java/java1.8 ***.rpm #安装openjdk su - ...

  8. [转帖] 部分收费的Oracle JDK VS 完全免费的OpenJDK

    来源: http://www.flammulina.com/2018/10/28/%E9%83%A8%E5%88%86%E6%94%B6%E8%B4%B9%E7%9A%84oracle-jdk-vs- ...

  9. 将Linux默认的OpenJDK替换为Oracle JDK

    在使用Logstash安装插件的时候,发生了一个错误,如下: ERROR: Something went wrong when installing logstash-input-jdbc, mess ...

  10. OpenJDK,Oracle's OpenJDK,Oracle JDK的区别与选择

    OpenJDK 单纯的OpenJDK指的是JDK的源码,以GPL协议开源,由企业和社区开发者共同维护和开发. Oracle's OpenJDK Oracle started providing ope ...

随机推荐

  1. SpringBoot常用注解大全

    常用注解概览 这里整理了一张SpringBoot常用注解的思维导图,本文主要讲解这些注解的用法. 组件相关注解 @ComponentScan 默认扫描当前包及其子包下面被@component,@Con ...

  2. Python elasticsearch 报错及解决方法

    1. ERROR: [1] bootstrap checks failed [1]: the default discovery settings are unsuitable for product ...

  3. 【4】Postman之Tests(断言)

    简介:使用postman完成请求后,验证返回结果,会用到tests断言.官方提供了很多可以直接使用的方法~ 接下来主要介绍这些方法是如何使用. 1. 变量相关: Get an environment ...

  4. 【C学习笔记】day5-3 编写代码模拟三次密码输入的场景

    3.编写代码模拟三次密码输入的场景. 最多能输入三次密码,密码正确,提示"登录成功",密码错误, 可以重新输入,最多输入三次.三次均错,则提示退出程序. #define _CRT_ ...

  5. ionic4 可能忽略的一些细节

    1.iOS中,页面被状态栏遮挡的问题 有的说 具体是解决是  在config.xml   配置如下代码 <preference name="StatusBarStyle"   ...

  6. ESModule导入

    //导入某方法 import pick from "lodash/pick"; //默认导入方式 import { pick } from "lodash"; ...

  7. 00_java进阶笔记

    _01_Object类 /* * java.util.Object Object类是最顶层的类,每个类都使用Object类作为父类 * 所有对象(包括数组)都实现这个类的方法 * 注: * 使用toS ...

  8. driver报错

    self.driver = webdriver.Chrome(),突然报错,运行不了 解决办法: 第一步:去检查你以安装的驱动版本,用cmd打开命令提示符:然后用命令:chromedriver 第二步 ...

  9. Redis哨兵模式+缓存穿透、击穿和雪崩

    一.哨兵模式概述(自动选主机的方式)主从切换技术:当主机宕机后,需要手动把一台从(slave)服务器切换为主服务器,这就需要人工干预,费时费力,还回造成一段时间内服务不可用,所以推荐哨兵架构(Sent ...

  10. Spring Boot--自定义异常类

    1.业务异常 /** * @Description: 业务异常 * @Author: Yaoson * @Create: 2022/4/21 0:05 **/ public class Busines ...