我应该使用哪个版本的 JDK?

Posted ThinkStu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我应该使用哪个版本的 JDK?相关的知识,希望对你有一定的参考价值。

本文在写作过程中参考了whichJDK

要构建和运行 Java 应用程序,就需要安装 JDK 环境。

OpenJDK 是 Java SE 规范的开源软件,但它只是源代码。二进制发行版由不同的供应商提供,适用于许多受支持的平台,这些发行版在许可证、商业支持、支持的平台和更新频率方面有所不同。

先说结论:

✅ 建议使用 Adoptium Eclipse Temurin 17 并确保您的本地版本与 CI 和生产版本匹配。


首先介绍不同版本的JDK

当前,JDK 计划每六个月(即每年的三月和九月)发布一个具有新版本。第三年的9 月发布一个长期支持 (LTS) 版本,承诺最少更新三年。

JDK版本类型发布日期主要更新推荐
8长期支持03/2014lambda先前发布模型下的最后一个 LTS 版本。Oracle 的免费更新已结束,但仍由其他人维护。在接下来的几个月内升级到 11 或 17!
9特征09/2017模块引入了新的发布模型。停产。现在升级到 11 或 17!
10特征03/2018var停产。现在升级到 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 ShenandoahZGC,它们可能是替代方案。

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,但包括一个新的高性能编译器和一个新的多语言虚拟机(可以执行用不同编程语言编写的代码)。还可以创建高度优化且启动速度极快的特定于平台的本机可执行文件。

以上是关于我应该使用哪个版本的 JDK?的主要内容,如果未能解决你的问题,请参考以下文章

java高版本的jvm怎样改成低版本的jvm

2018 JVM 生态报告:79% 的 Java 开发者使用 Java 8

http最高版本优化了哪些性能

2018 年 JVM 生态报告

JAVA EE,JAVA SE,JAVA ME,JDK,JRE,JVM之间的区别

ios系统上有 运行java的jvm吗?