Oracle JDK和 OpenJDK 之间的区别

Oracle JDK和 OpenJDK 之间的区别,第1张

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 发行版。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/795530.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存