这篇文章中,将会展示Oracle JDK和Open JDK的区别,首先会各自介绍下它们,然后再对比一下它们的区别,最后给大家列举一下其它实现JDK的开源组织或公司。
JDK(Java Development Kit)是一种用于Java平台编程的软件开发环境。它包含一个完整的Java运行时环境,即所谓的独立运行环境。之所以这样构成,是因为它比独立的 JRE 包含更多的工具,以及开发 Java 应用程序所需的其他组件。
oracle java
jdk文件目录
Oracle强烈推荐使用JDK这个术语来指代Java SE Development Kit。
Java SE 版本历史:
注意:斜体部分的版本不再接受支持,LTS代表是长期支持版本
我们可以看到,在 Java SE 7之前,Java SE 的主要版本大约每两年发布一次。Java SE 6到Java SE 7用了5年时间,到Java SE 8又用了3年时间。从JavaSE 10开始,大概是每6个月发布一次,可以看到一年有两个版本发布。但是并不是每个版本都是LTS(Long-Term-Support)版本。Oracle宣称将每三年将会发布一个LTS版本。
目前Java SE 17是最新的LTS版本,JavaSE8在2020年12月前接受免费公开更新,以供非商业使用。
目前Oracle已经收购了Sun(2010年),所以现在所说的JDK一般都是指Oracle JDK,之前被称为SUN JDK,目前Oralce JDK也是Java 编程语言的官方实现。
OpenJDK 是 JavaSE 平台版的免费开源实现,并在2007年首次发布。
OpenJDK 是自 SE 7版本以来 Java 标准版的官方参考实现。
最初它是基于JDK 7,但是自从Java10以来具体由JDK Project负责开源实现。类似Oracle的更新机制,JDK Project也是每6个月发布新特性。
值得注意的是,在这个长期运行的项目之前,有一些 JDK 发布项目发布了一个特性,然后就停止了。
让我们看下OpenJDK版本:
具体可查看JDK Project
JDK GA Releases
主要从发布周期,许可,性能,特性,发展这几方面来对比
根据前面的版本对比,Oracle一般三年会发布一个release版本,而OpenJDK每6个月发布一次。
只有release版本Oralce才会提供长期的支持。但是OpenJDK仅仅在下个版本发布之前进行支持。
Oracle JDK 是根据 Oracle 二进制代码许可协议授权的,OpenJDK则是基于开源GUN GPL V2许可。
在使用 Oracle JDK时,存在一些许可方面的问题。在没有商业许可证的情况下,Java SE 8在2019年1月发布后的公开更新是不能用于商业和生产环境的。但是OpenJDK是完全开源和免费的。
这两者之间没有真正的技术区别,因为 Oracle JDK 的构建过程是基于 OpenJDK 的。
但是说到性能这块,Oracle JDK具有更好的响应性和JVM性能。因为要服务于一些商业客户,所以Oralce在稳定性这块应该下了不少功夫。
相比之下,OpenJDK由于经常频繁发版,也许会遇到一些不稳定的问题。这一点我们可以在社区的留言上看到用户反馈了一些性能问题。
相比于Oralce具有的Flight Recorder, Java Mission Control, and Application Class-Data Sharing等功能,而OpenJDK仅仅拥有Font Renderer。
同时,Oracle拥有更多的GC(垃圾回收器)参数选项和更出色的渲染器
Oracle JDK完全由Oracle公司开发,而OpenJDK由Oracle,OpenJDK和Java社区开发。然而,顶尖的公司,如红帽,IBM,苹果公司和 SAP 公司也积极参与其开发。
就目前的来说,顶级公司在开发工具(Android和IntelliJ IDEA)里边使用JDK时之前通常更倾向于选择Oracle JDK,但是这两家公司已经转向了基于JetBrains构建的OpenJDK。
此外,主要的linux发行商(Fedora, Ubuntu, Red Hat Enterprise Linux)也将OpenJDK作为默认的Java 标准版本实现。
在Oracle的Blog中可以看到从Java11开始有很多重要的改变(有兴趣的可以参考:
https://blogs.oracle.com/java/post/oracle-jdk-releases-for-java-11-and-later)。
首先,Oracle将推出基于开源GNU General Public License v2, with the Classpath Exception (GPLv2+CPE)的JDK版本,同时也会有基于商业许可的OracleJDK,用来满足需要使用的客户,这部分客户往往不太愿意使用开源软件。相当于一个联合玩法,满足多方面需求,毕竟是商业公司,要兼顾竞争和收益,不得不说这方面Sun如果好好学习,不至于被收购。
这样一来之前的Flight Recorder, Java Mission Control, and Application Class-Data Sharing在OpenJDK里边也会出现了。所以从 Java11开始,Oracle JDK 和 OpenJDK 构建基本上是相同的。但是还是会有一些区别的。
下面我们来列举下:
Oracle JDK11
java 11 2018-09-25
Java(TM) SE Runtime Environment 18.9 (build 11+28)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11+28, mixed mode)
Open JDK11
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
免费和开源实现
专有实现
那么如何选择一个JDK呢,如果是一个开发者或者具有开发能力的公司,那么可以选择OpenJDK 甚至基于OpenJDK构建属于自己的JDK,比如:国外的AWS JDK,国内阿里的Alibaba Dragonwell。如果更多是B端企业用户需要稳定的运行环境,我建议花点钱选择正版Oracle JDK,一方面性能方面可能要比OpenJDK强劲,最关键的是稳定,一方面也可以得到Oracle官方的技术支持。