1. 简介

在本文中,我们将探讨Oracle Java Development Kit和OpenJDK之间的差异。我们先快速浏览一下,然后进行比较。之后,我们将看到其他JDK实现的列表。

2. Oracle JDK和Java SE历史

JDK(Java Development Kit)是Java平台编程中使用的软件开发环境。它包含一个完整的Java运行时环境,即所谓的私有运行时。该名称来自于它包含的工具多于独立的JRE以及开发Java应用程序所需的其他组件。

Oracle强烈建议使用术语JDK来引用Java SE(标准版)开发工具包(还有Enterprise Edition和Micro Edition平台)。

我们来看看Java SE的历史:

JDK Beta - 1995
JDK 1.0 - 1996年1月
JDK 1.1 - 1997年2月
J2SE 1.2 - 1998年12月
J2SE 1.3 - 2000年5月
J2SE 1.4 - 2002年2月
J2SE 5.0 - 2004年9月
Java SE 6 - 2006年12月
Java SE 7 - 2011年7月
Java SE 8(LTS) - 2014年3月
Java SE 9 - 2017年9月
Java SE 10(18。3) - 2018年3月
Java SE 11(18.9 LTS) - 2018年9月
Java SE 12(19。3) - 2019年3月
注意:不再支持斜体版本。

我们可以看到Java SE的主要版本大约每两年发布一次,直到Java SE 7.从Java SE 6开始花了五年时间,之后又花了三年时间升级到Java SE 8。

自Java SE 10以来,我们可以期待每六个月发布一次新版本。但是,并非所有版本都是长期支持(LTS)版本。由于Oracle的发布计划,LTS产品发布仅每三年发布一次。

Java SE 11是最新的LTS版本,Java SE 8将在2020年12月之前获得免费的公共更新,用于非商业用途。

在2010年Oracle收购Sun Microsystems之后,这个开发工具包得到了它的当前名称。在此之前,它的名字是SUN JDK,它是Java编程语言的官方实现。

3. OpenJDK

OpenJDK是Java SE 平台版本的免费开源实现。它最初于2007年发布,是Sun Microsystems于2006年开始开发的结果。

当然,我们应该强调 OpenJDK是自SE 7版以来Java标准版的官方参考实现。

最初,它仅基于JDK 7.但是,从Java 10开始,Java SE平台的开源参考实现是JDK项目的责任。而且,就像Oracle一样,JDK项目也将每六个月发布一次新功能。

我们应该注意到,在这个长期运行的项目之前,JDK Release Projects发布了一个功能,然后停止了。

现在让我们看看OpenJDK版本:

OpenJDK 6项目 - 基于JDK 7,但经过修改后提供了Java 6的开源版本
OpenJDK 7项目 - 2011年7月28日
OpenJDK 7u项目 - 该项目开发Java Development Kit 7的更新
OpenJDK 8项目 - 2014年3月18日
OpenJDK 8u项目 - 该项目开发Java Development Kit 8的更新
OpenJDK 9项目 - 2017年9月21日
JDK10项目于2018年3月10日至20日发布
JDK11项目于2018年9月11日至25日发布
JDK12项目发布 - 稳定阶段

4. Oracle JDK与OpenJDK

在本节中,我们将重点介绍Oracle JDK和OpenJDK之间的主要区别。

4.1. 发布时间表

正如我们所提到的,Oracle将每三年发布一次,而OpenJDK将每六个月发布一次。

Oracle为其版本提供长期支持。另一方面,OpenJDK仅支持对发布的更改,直到下一个版本发布。

4.2. 许可证

Oracle JDK根据Oracle二进制代码许可协议获得许可,而OpenJDK具有GNU通用公共许可证(GNU GPL)版本2,使用了一个修正版本。

使用Oracle平台时会产生一些许可影响。如Oracle 宣布的那样,在没有商业许可的情况下,在2019年1月之后发布的Oracle Java SE 8的公开更新将无法用于商业,商业或生产用途。但是,OpenJDK是完全开源的,可以自由使用。

4.3. 性能

有两者之间没有真正的技术差别,因为针对Oracle JDK构建过程是基于OpenJDK的的。

在性能方面,Oracle在响应能力和JVM性能方面要好得多。由于其对企业客户的重要性,它更加关注稳定性。

相比之下,OpenJDK将更频繁地发布版本。结果,我们可能遇到不稳定的问题。根据社区反馈,我们知道一些OpenJDK用户遇到了性能问题。

4.4. 功能

如果我们比较功能和选项,我们将看到 Oracle产品具有Flight Recorder,Java Mission Control和Application Class-Data Sharing 功能,而OpenJDK具有Font Renderer功能。

此外,Oracle有更多的垃圾收集选项和更好的渲染器,我们可以在另一个比较中看到。

4.5. 发展与人气

Oracle JDK由Oracle Corporation完全开发,而OpenJDK由Oracle,OpenJDK和Java Community开发。然而,红帽,Azul Systems,IBM,Apple Inc.,SAP AG等顶级公司也积极参与其开发。

正如我们从前一小节的链接中看到的那样,当涉及到在其工具中使用Java开发工具包的顶级公司(例如Android Studio或IntelliJ IDEA)的流行时,Oracle JDK是更受欢迎的

另一方面,主要的Linux发行版(Fedora,Ubuntu,Red Hat Enterprise Linux)提供OpenJDK作为默认的Java SE实现。

5.自Java 11以来的变化

正如我们在Oracle博客文章中看到的那样 ,从Java 11开始有一些重要的变化。

首先,Oracle将使用Oracle JDK作为Oracle产品的一部分,将开源**GNU通用公共许可证v2与Classpath Exception(GPLv2 + CPE)和商业许可证结合使用,或者更改其历史“ BCL ”许可证, 或者服务,或不欢迎开源软件。

每个许可证都有不同的版本,但这些版本在功能上只与一些装饰和包装差异相同。

此外,OpenJDK现在提供传统的“商业功能”,如Flight Recorder,Java Mission Control和Application Class-Data Sharing,以及Z Garbage Collector。因此,Oracle JDK和OpenJDK构建从Java 11开始基本相同。

让我们看看主要的区别:

  • 使用-XX:+ UnlockCommercialFeatures选项时,Oracle的Java 11工具包会发出警告,而在OpenJDK版本中,此选项会导致错误
  • Oracle JDK提供了一种配置,可将使用日志数据提供给“高级管理控制台”工具
  • Oracle一直要求第三方加密提供程序由已知证书签名,而OpenJDK中的加密框架具有开放加密接口,这意味着可以使用哪些提供程序没有限制
  • Oracle JDK 11将继续包括安装程序,品牌和JRE打包,而OpenJDK构建目前可用作zip和tar.gz文件
  • 该javac的-释放命令行为有所不同了Java 9和Java 10个目标由于一些额外的模块在Oracle的版本存在
  • java -version和java -fullversion命令的输出将Oracle的构建与OpenJDK构建区分开来

6.其他JDK实现

现在让我们快速浏览一下其他活动的Java Development Kit实现。

6.1. 自由开源

按字母顺序列出的以下实现是开源的,可以免费使用:

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
leJOS
Maxine
Multi-OS Engine
RopeVM
uJVM

6.2. 专有实现

还有受版权保护的实施:

Azul Zing JVM
CEE-J
Excelsior JET
GraalVM EE
Imsys AB
JamaicaVM(aicas)
JBlend(Aplix)
MicroJvm(IS2T - 工业智能软件技术)
OJVM
PTC Perc
SAP JVM
Waratek CloudVM for Java

与上面列出的有效实现一起,我们可以看到非有效实现的列表 以及每个实现的简短描述。

7.结论

在本文中,我们专注于当今最流行的两个Java开发工具包。

我们首先描述了它们中的每一个,然后强调了它们之间最显着的差异。然后,我们特别关注自Java 11以来的变化和差异。最后,我们列出了今天可用的其他有效实现。

尾声:

根据 Oracle 官方的说法(Oracle JDK Releases for Java 11 and Later),在 Java 11 之后,OracleJDK 和 OpenJDK 的功能基本一致,之前 OracleJDK 中的私有组件大多数也已经被捐赠给开源组织,现在它们之间只有少量的区别。

要比哪个更稳定,OpenJDK 实际上不适合拿来和 OracleJDK 进行对比,OpenJDK 不提供 LTS 服务,而 OracleJDK 每三年都会推出一个 LTS 版进行长期支持。和 OracleJDK 对比的应该是 AdoptOpenJDK、Zulu、Red Hat OpenJDK 以及 Liberica JDK,它们都是基于 OpenJDK 的发行版,由不同的商业公司提供商业支持,包括和 OracleJDK 周期相同的 LTS 版。与这些 OpenJDK 的发行版相比,OracleJDK 并没有本质差异,稳定性也是智者见智仁者见仁的,差异并不大。

相比之下,现在更推荐选择一个 OpenJDK 的发行版使用,而不是选择 OracleJDK:

  • OracleJDK 和这些 OpenJDK 发行版功能基本一致,背后同样有公司提供商业支持,稳定性也难分优劣,Red Hat OpenJDK、Zulu 和 Liberica JDK 都通过了 TCK
  • OracleJDK 修改了协议,除了开发、测试以及演示用途,其他场合都是要收费的(参见我的这个答案),而 Zulu、AdoptOpenJDK 和 Liberica JDK 都提供适用于各种用途的免费版本,并提供 LTS 服务,只有在需要商业支持的时候需要付费
  • OracleJDK 对一般用户友善程度也不是最高的,新版不再捆绑 JavaFX,同时不提供 32 位构建

现在我最推荐开发者和一般用户使用的是Liberica JDK,它提供了捆绑 JavaFX 的 full 版,支持 macOS x86_64、Windows x86、Windows x86_64、Linux x86、Linux x86_64、Alpine Linux x86_64、Linux ARMv8、Linux ARMv7 HardFloat、Linux PPC64 LE 等平台,对于需要 32 位环境或者需要在小众平台上工作的用户来说很友好。同时它的 exe 安装包能够方便的配置环境变量,还提供 YUM 和 APT 仓库,提供 Docker 镜像,目前来说应该是对一般用户最友好的 OpenJDK 发行版。

Oracle JDK和 OpenJDK 之间的区别相关推荐

  1. oracle jdk什么意思,Oracle JDK和OpenJDK之间的区别是什么?

    Oracle JDK和OpenJDK之间有什么区别?下面本篇文章就来给大家介绍一下Oracle JDK和OpenJDK之间的区别是什么,希望对大家有所帮助.[视频教程推荐:Java教程] Oracle ...

  2. Oracle JDK 和 OpenJDK 有什么区别?

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

  3. 面试官 | Oracle JDK 和 OpenJDK 有什么区别?

    作者 | petercao 来源 | urlify.cn/yAn6ru OpenJDK是Sun在2006年末把Java开源而形成的项目,这里的"开源"是通常意义上的源码开放形式,即 ...

  4. Oracle与OpenJDK之间的区别

    简介 在本文中,我们将探讨Oracle Java Development Kit和OpenJDK之间的差异并进行比较. Oracle JDK Oracle JDK由Oracle公司开发,该公司是Sun ...

  5. Java常见面试题:Oracle JDK 和 OpenJDK 的区别?

    Oracle JDK 和 OpenJDK 的区别? 可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK.那么Oracle和OpenJDK之间是否存在重大差异?下面我通过收集到的一些资 ...

  6. 【方向盘】逐渐碎片化的Java生态圈:Oracle JDK、OpenJDK、阿里Dragonwell、华为毕昇

    Oracle JDK开始收费后,我们还能用什么? 本文已被https://yourbatman.cn收录:女娲Knife-Initializr工程可公开访问啦:程序员专用网盘https://wangp ...

  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. JVM,JDK,JRE和OpenJDK有什么区别?

    本文翻译自:What is the difference between JVM, JDK, JRE & OpenJDK? What is the difference between JVM ...

最新文章

  1. Hbase与hive整合
  2. 如何更高效的管理原生微服务应用
  3. Rsync + Sersync 实现数据增量同步
  4. A. Powered Addition【贪心】
  5. UVA11192 Group Reverse【水题】
  6. opencv数据的读取
  7. java mail(转贴)//从哪里找到忘记了,不过绝对不是自己写的
  8. HttpClient RestTemplate
  9. c# encode decode
  10. 一位计算机专业硕士毕业生的求职经历和感想
  11. 观看加勒比海盗惊涛怪浪在线高清串流最快
  12. 大数据入门9:半结构化数据模型(Semi-structured Data Model)
  13. selenium打开浏览器后闪退解决
  14. 计算KS值的标准代码
  15. Java代码生成图片验证码实现
  16. 酷跑游戏C语言,毕业设计(论文)-跑酷游戏设计(源程序).doc
  17. 约瑟夫环(好人坏人)
  18. QTableView 去除Item选中的虚线框
  19. 静态库那些事儿/MT /MD
  20. 国内的windows硬件检测软件算是很牛逼的吧!!!?

热门文章

  1. 如何显示计算机语言栏,win7电脑显示语言栏的具体操作方法
  2. JAVA音频研究2:音频输入流(javax.sound学习指南,javax.sound学习实战)
  3. win10和ubuntu18.04双系统解决罗技k380用一个频道无缝连接
  4. ubuntu 环境配置与软件安装
  5. 暖通空调远程监控系统方案
  6. 物联网DTU用于空调远程监控的作用
  7. PDF去除水印(1)-根据文本移除对象
  8. 学习基础HTML、CCS、JavaScript 知识实现抽奖页面
  9. Java 中的自动装箱和拆箱详解
  10. BGP的路由过滤,BGP的社团属性,MPLS----多协议标签交换技术