本文在写作过程中参考了whichJDK
要构建和运行 Java 应用程序,就需要安装 JDK 环境。
OpenJDK 是 Java SE 规范的开源软件,但它只是源代码。二进制发行版由不同的供应商提供,适用于许多受支持的平台,这些发行版在许可证、商业支持、支持的平台和更新频率方面有所不同。
先说结论:
✅ 建议使用 Adoptium Eclipse Temurin 17 并确保您的本地版本与 CI 和生产版本匹配。
首先介绍不同版本的JDK
当前,JDK 计划每六个月(即每年的三月和九月)发布一个具有新版本。第三年的9 月发布一个长期支持 (LTS) 版本,承诺最少更新三年。
JDK版本 | 类型 | 发布日期 | 主要更新 | 推荐 |
---|---|---|---|---|
8 | 长期支持 | 03/2014 | lambda | 先前发布模型下的最后一个 LTS 版本。Oracle 的免费更新已结束,但仍由其他人维护。在接下来的几个月内升级到 11 或 17! |
9 | 特征 | 09/2017 | 模块 | 引入了新的发布模型。停产。现在升级到 11 或 17! |
10 | 特征 | 03/2018 | var | 停产。现在升级到 11 或 17! |
11 | 长期支持 | 09/2018 | 新的 HTTP 客户端 | 广泛使用的 LTS 版本。计划在未来几个月内升级到版本 17。 |
12 | 特征 | 03/2019 | 停产。现在升级到17! | |
13 | 特征 | 09/2019 | 停产。现在升级到17! | |
14 | 特征 | 03/2020 | 新的Switch表达式 | 停产。现在升级到17! |
15 | 特征 | 09/2020 | 文本块 | 停产。现在升级到17! |
16 | 特征 | 03/2021 | 记录 | 停产。现在升级到17! |
17 | 长期支持 | 09/2021 | 密封类 | 当前的 LTS 版本。立即更新至 17.0.3+! |
18 | 特征 | 03/2022 | 默认为 UTF-8 | 坚持17! 这是一个没有重要功能的短期版本。 -Dfile.encoding=UTF-8 您可能想通过在当前的 JDK 中进行设置来检查是否遇到“默认 UTF-8”的任何问题。 |
19 | 特征 | 09/2022 | 仅预览和孵化器功能 | 坚持17! 如果您之前升级到 18,请立即升级到 19。 |
您必须决定是要坚持使用最新的 LTS 版本,还是要使用最新的功能版本并每六个月升级一次。两种选择都可以,但如果您不确定,请坚持使用最新的 LTS 版本。
OpenJDK 项目本身在openjdk.java.net上进行管理,您可以在其中找到规范、源代码和邮件列表,但没有可供下载的构建版本。您需要选择一个发行版。
不同的厂商版本:
Oracle OpenJDK
Oracle 以压缩存档格式为 Linux、macOS 和 Windows 提供 OpenJDK 构建。
这些构建只会更新 6 个月。在此短时间后将无法获得更新和安全补丁。这也适用于 LTS 版本!例如,最新的 OpenJDK 11 版本是11.0.2+9而当前的 OpenJDK 版本是11.0.12+7。
Oracle Java SE Development Kit (JDK)
Oracle 提供了 OpenJDK 的商业版本,它基于与 OpenJDK 完全相同的来源:Oracle Java SE Development Kit (JDK)。Oracle 为这些构建提供更新定期更新和安全补丁。
Adoptium Eclipse Temurin
Eclipse Adoptium是Eclipse Foundation旗下的顶级项目,为开源软件提供资源和专业的治理模型。Adoptium 工作组由对 Java 技术有战略兴趣的主要公司和组织组成,包括 Red Hat、IBM、Microsoft、Azul 和 iJUG。之前的 AdoptOpenJDK 项目已经迁移到 Eclipse Adoptium。
Adoptium OpenJDK 构建称为Eclipse Temurin,以区分项目和构建。
Eclipse Temurin 构建是高质量的、供应商中立的,并且在宽松许可下经过了 TCK 测试。
Adoptium 表示,只要积极维护相应的上游源代码,它将继续为 LTS 版本构建二进制文件。
AdoptOpenJDK
AdoptOpenJDK 项目是 Eclipse Adoptium 的前身,为默认的 HotSpot 和 OpenJ9 虚拟机提供高质量的 OpenJDK 构建。
Azul Zulu
Azul Systems, Inc. 专注于专业的 Java 技术和 JDK 的商业支持。Azul 在业界享有很高的声誉,并参与了各种工作组来发展 Java 平台。
Azul为许多操作系统和架构提供名为Azul Zulu的开源 OpenJDK 构建。此外,Azul 还提供满足特殊要求的构建,例如精简的 JRE 和包含 OpenJFX 的构建。
这些构建的缺点是依赖于一家公司,这可能会突然更改其许可或更新政策。
Azul Zing
Azul Zing 是一个商业 JDK,目前作为Azul Platform Prime销售。它需要与 Azul Systems 签订商业合同才能用于生产。
Zing 基于 OpenJDK,并添加了获得专利的“C4 无间断垃圾收集器”、“Falcon JIT 编译器”(以更高的 CPU 使用率和更长的启动和预热时间为代价优化吞吐量)和一些功能加快编译器预热时间(通过分析和存储文件中训练运行的优化来减轻 Falcon JIT 编译器较慢的预热时间)。
Azul Zing 在金融交易应用程序中有一些用例,其中 GC 暂停是一个问题。除此之外,常规 OpenJDK 包含免费的低暂停时间 GC Shenandoah和ZGC,它们可能是替代方案。
BellSoft Liberica JDK
与Azul类似,BellSoft专注于专业的Java技术和对JDK的商业支持。此外,BellSoft 在业界享有很高的声誉,并参与了各种工作组来发展 Java 平台。
BellSoft为几乎所有操作系统和架构提供名为Liberica JDK的开源 OpenJDK 构建。
流行的 Spring Boot 框架选择 Liberica JDK 作为其buildpack的运行时。
这些构建的缺点是依赖于一家公司,这可能会突然更改其许可或更新政策。
IBM Semeru Runtime
IBM 开发了自己的 Java 虚拟机版本,称为 J9,并作为Eclipse OpenJ9 开源。它是默认 HotSpot Java 虚拟机的替代品,但它从未获得太多人气。
IBM 现在提供基于 Eclipse OpenJ9 Java 虚拟机和一些 OpenJDK 类库的名为Semeru Runtime的构建。OpenJ9内存占用低,使用共享类启动速度快,但与 Hotspot 虚拟机相比吞吐量较低。
Amazon Corretto
由于 Oracle 改变了对其 OpenJDK 构建的支持和许可政策,主要的云提供商决定建立自己的托管 OpenJDK 构建并提供长期更新。显然,这是为了规避风险,尤其是对甲骨文的诉讼。
2018 年,AWS 发布了Corretto,这是另一个 OpenJDK 构建。
AWS 包括来自较新 OpenJDK 版本的错误修复的反向端口,并声称他们将添加可能尚未集成到 OpenJDK 项目中的补丁。亚马逊已经实施了一个替代加密提供商,该提供商已针对其服务进行了优化。它计划用作 Corretto 中的默认加密实现。
Amazon 为主要开发平台提供发行版,并为其自己的 Amazon Linux 2 提供优化版本。
Microsoft OpenJDK
2021 年,微软发布了 OpenJDK 的 Microsoft Build,这是另一个 OpenJDK 构建。
Microsoft 可能会包含来自较新 OpenJDK 版本的错误修复的反向端口,并声称他们将添加可能尚未集成到 OpenJDK 项目中的补丁。
Microsoft 为主要开发平台提供版本。
Alibaba Dragonwell
阿里巴巴提供了一个 OpenJDK 构建,其中包括后台端口和一些额外的功能。
SapMachine
SapMachine 是另一个 OpenJDK Build,由 SAP 维护。
Red Hat OpenJDK
Red Hat 为 LTS 版本提供 OpenJDK 构建。
OJDK
该项目已停止。ojdkbuild 项目的目标是提供 OpenJDK 的 Windows x86_64 二进制文件,这些二进制文件在行为上尽可能接近 Linux OpenJDK 包,例如,通过使用系统库而不是 zlib 或 OpenSSL 的打包版本。它使用了 CentOS 中包含的软件包。这些构建的一个用例是在 Windows 机器上开发 Java 软件并将它们部署到生产环境中的 Linux 服务器。
GraalVM
GraalVM 是一个完全兼容的 JDK,但与所有其他构建有很大不同。
GraalVM 由 Oracle 开发。它基于 OpenJDK,但包括一个新的高性能编译器和一个新的多语言虚拟机(可以执行用不同编程语言编写的代码)。还可以创建高度优化且启动速度极快的特定于平台的本机可执行文件。