openjdk与Oraclejdk的区别

 更新时间:2020年08月19日 08:35:53   作者:程序员自由之路  
这篇文章主要介绍了openjdk与Oraclejdk的区别,帮助大家更好的了解JAVA,感兴趣的朋友可以了解下

在2006年11月13日的JavaOne大会上,Sun公司(当时还没被收购)宣布计划要把Java开源,在随后的一年多时间内,它陆续地将JDK的各个部分在GPL v2(GNU General Public License v2)协议下公开了源码,并建立了OpenJDK组织对这些源码进行独立管理。除了极少量的产权代码(Encumbered Code,这部分代码所有权不属于Sun公司,Sun本身也无权进行开源处理)外,OpenJDK几乎拥有了当时SunJDK 的全部代码。

OpenJDK的质量主管曾经表示在JDK 7中,SunJDK和OpenJDK除了代码文件头的版权注释之外,代码几乎是完全一样的,所以OpenJDK 7与SunJDK 7本质上就是同一套代码库出来的产品。

总结下来,OpenJDK和OracleJDK存在以下方面的区别:

授权协议不同

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

OpenJDK不包含OracleJDK中的部分产权代码

由于OracleJDK中的部分代码的产权也不是归Oracle所有的,所以这部分代码就没开源到OpenJDK中。但是很多“好心”的开源爱好者在OpenJDK中实现了相同的功能,并将源代码开源到OpenJDK中。比如说字体栅格化引擎,使用Free Type代替。

不能使用Java商标

在Sun被Oracle收购以后,Java这个商标就归Oracle所有了。不仅OpenJDK不能使用java商标,J2EE这个曾经Sun的亲儿子命运也同样坎坷,已经被Oracle无情抛弃,同样
不能在使用Java商标。

但是随着JDK版本的不断发布,Oracle失去了维护OpenJDK的耐心,因为不赚钱啊。RedHat从Oracle手上接过OpenJDK的管理权利和维护职责。

2019年3月20日,JDK 12发布,只包含8个JEP,其中主要有Switch表达式、Java微测试套件(JMH)等新功能,最引人注目的特性无疑是加入了由RedHat领导开发的Shen-andoah垃圾收集器。Shenandoah作为首个由非Oracle开发的垃圾收集器,其目标又与Oracle在JDK 11中发布的ZGC几乎完全一致,两者天生就存在竞争。Oracle马上用实际行动抵制了这个新收集器,在JDK 11发布时才说应尽可能保证OracleJDK和OpenJDK的兼容一致,转眼就在OracleJDK 12里把Shenandoah的代码通过条件编译强行剔除掉,使其成为历史上唯一进入了OpenJDK发布清单,但在OracleJDK中无法使用的功能。

所以对于高版本的OpenJDK和OracleJDK之间,也存在OpenJDK中有的功能,但是OracleJDK中不包含的。

总的来说,对于普通开发,使用OpenJDK和OracleJDK并没有太大差别,两者的差别更体现在商业考量上面。

openjdk源代码不完整

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

总结

其他区别欢迎各位指出

以上就是openjdk与Oraclejdk的区别的详细内容,更多关于openjdk与Oraclejdk的资料请关注脚本之家其它相关文章!

相关文章

  • springboot跨域CORS处理代码解析

    springboot跨域CORS处理代码解析

    这篇文章主要介绍了springboot跨域CORS处理代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Java字节码中jvm实例用法

    Java字节码中jvm实例用法

    在本篇文章里小编给大家整理的是一篇关于Java字节码中jvm实例用法内容,有兴趣的朋友们可以学习参考下。
    2021-02-02
  • JAVA 根据身份证计算年龄的实现代码

    JAVA 根据身份证计算年龄的实现代码

    这篇文章主要介绍了JAVA 根据身份证计算年龄的实例代码及java根据出生日期获得年龄的方法,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-05-05
  • Mybatis Generator 获取不到字段注释的解决

    Mybatis Generator 获取不到字段注释的解决

    这篇文章主要介绍了Mybatis Generator 获取不到字段注释的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • java的io操作(将字符串写入到txt文件中)

    java的io操作(将字符串写入到txt文件中)

    这篇文章主要介绍了java的io操作示例,将字符串写入到txt文件中,需要的朋友可以参考下
    2014-04-04
  • Java类加载基本过程详细介绍

    Java类加载基本过程详细介绍

    这篇文章主要介绍了Java类加载基本过程详细介绍的相关资料,需要的朋友可以参考下
    2016-12-12
  • Java 中DateUtils日期工具类的实例详解

    Java 中DateUtils日期工具类的实例详解

    这篇文章主要介绍了Java 中DateUtils日期工具类的实例详解的相关资料,有时候开发java项目使用日期类型,这里介绍下日期工具类,需要的朋友可以参考下
    2017-08-08
  • 深入探究Java线程的创建与构造方法

    深入探究Java线程的创建与构造方法

    这篇文章主要给大家分享的是java线程的创建以及构造方法,想了解具体方式的小伙伴可以参考下面文章内容,希望对你有所帮助
    2022-04-04
  • Spark SQL配置及使用教程

    Spark SQL配置及使用教程

    SparkSQL是spark的一个模块,主入口是SparkSession,将SQL查询与Spark程序无缝混合,这篇文章主要介绍了Spark SQL配置及使用,需要的朋友可以参考下
    2021-12-12
  • Java操作pdf的工具类itext的处理方法

    Java操作pdf的工具类itext的处理方法

    这篇文章主要介绍了Java操作pdf的工具类itext,iText是一种生成PDF报表的Java组件,通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超链接显示或下载得到生成的报表,需要的朋友可以参考下
    2022-04-04

最新评论