openjdk与Oraclejdk的区别
在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的资料请关注脚本之家其它相关文章!
相关文章
Java自定义过滤器和拦截器实现ThreadLocal线程封闭
本文主要介绍了Java自定义过滤器和拦截器实现ThreadLocal线程封闭,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2022-08-08Spring Boot基础学习之Mybatis操作中使用Redis做缓存详解
这篇文章主要给大家介绍了关于Spring Boot基础学习之Mybatis操作中使用Redis做缓存的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用spring boot具有一定的参考学习价值,需要的朋友们下面来一起看看吧2018-11-11
最新评论