这篇文章中,将会展示Oracle JDK和Open JDK的区别,首先会各自介绍下它们,然后再对比一下它们的区别,最后给大家列举一下其它实现JDK的开源组织或公司。
Oracle JDK和Java SE的历史
JDK(Java Development Kit)是一种用于Java平台编程的软件开发环境。它包含一个完整的Java运行时环境,即所谓的独立运行环境。之所以这样构成,是因为它比独立的 JRE 包含更多的工具,以及开发 Java 应用程序所需的其他组件。
Oracle强烈推荐使用JDK这个术语来指代Java SE Development Kit。
Java SE 版本历史:
- JDK Beta – 1995
- JDK 1.0 – January 1996
- JDK 1.1 – February 1997
- J2SE 1.2 – December 1998
- J2SE 1.3 – May 2000
- J2SE 1.4 – February 2002
- J2SE 5.0 – September 2004
- Java SE 6 – December 2006
- Java SE 7 – July 2011
- Java SE 8 (LTS) – March 2014
- Java SE 9 – September 2017
- Java SE 10 (18.3) – March 2018
- Java SE 11 (18.9 LTS) – September 2018
- Java SE 12 (19.3) – March 2019
- Java SE 13 – September 2019
- Java SE 14 – March 2020
- Java SE 15 – September 2020
- Java SE 16 – March 2021
- Java SE 17 (LTS) – September 2021
- Java SE 18 – March 2022
- Java SE 19 – September 2022
- Java SE 20 – March 2023
- Java SE 21 (LTS) – September 2023
注意:斜体部分的版本不再接受支持,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
OpenJDK 是 JavaSE 平台版的免费开源实现,并在2007年首次发布。
OpenJDK 是自 SE 7版本以来 Java 标准版的官方参考实现。
最初它是基于JDK 7,但是自从Java10以来具体由JDK Project负责开源实现。类似Oracle的更新机制,JDK Project也是每6个月发布新特性。
值得注意的是,在这个长期运行的项目之前,有一些 JDK 发布项目发布了一个特性,然后就停止了。
让我们看下OpenJDK版本:
- OpenJDK 6 project – based on JDK 7
- OpenJDK 7 project – 2011/07/28
- OpenJDK 7u project – JDK7的更新版本
- OpenJDK 8 project – 2014/03/18
- OpenJDK 8u project –JDK8的更新版本
- OpenJDK 9 project – 2017/09/21
- JDK project release 10 – 2018/03/20
- JDK project release 11 – 2018/09/25
- JDK project release 12 – 2019/03/19
- JDK project release 13 – 2019/09/17
- JDK project release 14 – 2020/03/17
- JDK project release 15 – 2020/09/15
- JDK project release 16 – 2021/03/16
- JDK project release 17 – 2021/09/14
- JDK project release 18 – 2022/03/22
- JDK project release 19 – 2022/09/20
- JDK project release 20 – 2023/03/21
- JDK project release 21 – 开发中
具体可查看JDK Project
Oracle JDK与OpenJDK的区别
主要从发布周期,许可,性能,特性,发展这几方面来对比
- 发布周期不同
根据前面的版本对比,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 标准版本实现。
Java11开始的变化
在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 Java11在使用-XX:+UnlockCommercialFeatures选项时会发出警告,而在OpenJDK中直接会导致错误
- OracleJDK 提供了一种配置,为“Advanced Management Console”工具提供使用日志数据
- java --version的输出不一样
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)
- Oracle JDK 一直要求第三方加密提供已知的证书签名。 OpenJDK 中的加密框架具有开放的加密接口,这意味着它不限制可以使用哪些加密程序的实现。 Oracle JDK 11 将继续需要有效签名,而 Oracle OpenJDK 构建将继续允许使用有效签名或未签名的第三方加密提供商
其它JDK实现
免费和开源实现
- AdoptOpenJDK
- Amazon Corretto
- Azul Zulu
- Bck2Brwsr
- CACAO
- Codename One
- DoppioJVM
- Eclipse OpenJ9
- GraalVM CE
- HaikuVM
- HotSpot
- Jamiga
- JamVM
- Jelatine JVM
- Jikes RVM (Jikes Research Virtual Machine)
- JVM.go
- Liberica JDK
- leJOS
- Maxine
- Multi-OS Engine
- RopeVM
- uJVM
专有实现
- Azul Zing JVM
- CEE-J
- Excelsior JET
- GraalVM EE
- Imsys AB
- JamaicaVM (aicas)
- JBlend (Aplix)
- MicroJvm (IS2T – Industrial Smart Software Technology)
- OJVM
- PTC Perc
- SAP JVM
- Waratek CloudVM for Java
如何选择
那么如何选择一个JDK呢,如果是一个开发者或者具有开发能力的公司,那么可以选择OpenJDK 甚至基于OpenJDK构建属于自己的JDK,比如:国外的AWS JDK,国内阿里的Alibaba Dragonwell。如果更多是B端企业用户需要稳定的运行环境,我建议花点钱选择正版Oracle JDK,一方面性能方面可能要比OpenJDK强劲,最关键的是稳定,一方面也可以得到Oracle官方的技术支持。
本文暂时没有评论,来添加一个吧(●'◡'●)