本文在写作过程中参考了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 构建,其中包括后台端口和一些额外的功能

Tencent Kona

Tencent Kona 8 基于 OpenJDK 8 开发的,所以叫 Kona-8,这个数字是跟 OpenJDK 的版本走的。Kona 是腾讯开源的、免费的、基于 OpenJDK 的发行版本,并且受腾讯长期支持(LTS)和季度更新,目前由腾讯专业的 JVM 技术团队进行维护和开发;在腾讯内部,Kona 就是默认使用的 JDK,主要应用于腾讯云业务场景及其他 Java 应用场景,并且针对超大规模的大数据机器学习和云计算进行了深度优化。

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?相关推荐

  1. 转】windows下使用批处理脚本实现多个版本的JDK切换

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/5209386.html 感谢! 一.JDK版本切换批处理脚本 我们平时在window上做开发的时候,可能需要同时开 ...

  2. 安装多个版本的jdk

    2019独角兽企业重金招聘Python工程师标准>>> 电脑上装了两个版本的JDK,分别是Jdk1.5u6和Jdk1.6u29,打开命令行窗口,输入 java -version 命令 ...

  3. java 安装多版本_一台电脑安装多个版本的jdk

    一台电脑安装多个版本的jdk 我们平时在做Java开发的时候,有时需要使用多个版本的jdk, 那么一台电脑上需要安装多个JDK了. 那一台电脑上可不可以同时安装多个版本的jdk呢? 答案是可以的! 但 ...

  4. Linux 卸载旧版本的 JDK 并且升级新的JDK 【转】

    centos5.2自带的了jdk,但还是1.4的版本,太老掉牙了,tomcat6都没发跑起来.显然没法满足我们的要求.我们先查看一下,如下所示: [root@localhost soft]# java ...

  5. Eclipse2020安装了最新版本的JDK却无法打开,提示版本太老的完美解决方法

    Eclipse2020安装了最新版本的JDK却无法打开,提示版本太老的完美解决方法 温馨提示:此教程仅限于提前配置过变量的朋友们,没有配置变量的先去配个变量 相信有很多初学者,或者刚刚安装这个软件的朋 ...

  6. java 对应sql驱动版本_关于Oracle JDBC驱动版本、JDK版本、数据库版本对应关系(相关的报错:ORA-28040)...

    关于Oracle JDBC驱动版本.JDK版本.数据库版本对应关系 说明: 1.Oracle JDBC驱动版本查看方式(Oracle JDBC驱动程序随Oracle数据库服务器一起提供)(用户:Ora ...

  7. mac java版本 不一致_mac实现不同版本的jdk切换

    之前使用jdk11进行java开发(纯粹因为喜欢新版?) 但是使用jdk11在布署hadoop伪分布时各种报错, 所以还是下载jdk8回来. 接下来就是mac端切换两个版本的jdk (按照网上找的方式 ...

  8. weblogic各个版本对JDK和Spring的支持度

    weblogic各个版本对JDK和Spring的支持度 现在很多人在使用SSH架构(Spring, Struts, Hibernate)开发, Tomcat 上开发完了, 认为往WebLogic上一放 ...

  9. Sun公司发布最新版本的JDK 6 update 11

    UN公司于近日发布最新版本的JDK--Java SE Development Kit (JDK) 6 Update 11,该版本的详细版本说明如下: http://java.sun.com/javas ...

  10. java version 和javac版本不一致_windows安裝多個版本的jdk,解決java-version和javac-version版本不一致的問題...

    系統先裝了jdk1.8 ,環境變量里配置的是jdk1.8,java -version 與javac -version 版本一致. 然后安裝了jdk1.6 ,環境變量java_home 改成了1.6,但 ...

最新文章

  1. mxGraph改变图形大小重置overlay位置
  2. cve-2019-7609 Kibana远程代码执行漏洞攻击方法和漏洞原理分析
  3. spring cloud Alibaba Sentinel中文文档
  4. rxjs switchMap的实现原理
  5. mongodb实验报告_Dropwizard,MongoDB和Gradle实验
  6. 华为鸿蒙系统智能手机_余承东再度确认:鸿蒙系统将适配到华为手机上
  7. 渗透测试 已学课时 1 个_我14岁上创业课时学到的东西
  8. 【C/S】FIPS安全验证问题
  9. 没有算法资源,产品经理如何从0到1搭建推荐系统?
  10. Green Deep Learning:NLP在大模型之外的另一种思路!
  11. java axis_Java 使用Axis实现WebService实例
  12. 纤亿通之光纤传输知识必备大全
  13. 使用DuckDuckGo在命令行中搜索
  14. 错误No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbala
  15. 微信小助手简版 WeChatSeptet for Mac安装教程!
  16. python erp操作_谈OpenERP部署环境操作步骤
  17. KY-RTI分布仿真技术:第八章 Visual C#程序设计
  18. 【企业架构设计实战】2 业务架构设计
  19. 9月17日服务器维护,《海岛纪元》9月17日维护公告 「失落之城」正式开服
  20. 中止执行后超过2年_执行中止。债权人是否两年内都要申请执行一次。如果中止执行两年内不申请执行,是否都再也执行不了...

热门文章

  1. Android: .java文件转.dex和java字节码
  2. adsl 连接提示 678 错误,远程计算机没反映
  3. 搭建个人云服务(一)
  4. 用java编写一个抛物线运动_用js实现简单的抛物线运动
  5. java 随机昵称_Java随机产生中文昵称
  6. 农村小学计算机教育论文,浅谈现代信息技术在农村小学语文教学中的有效应用...
  7. 深圳Java培训:Java行业新手如何适应工作?
  8. 依次运行多个python文件
  9. 《小王子》,《纳尼亚传奇:魔法师的外甥》,《鲁滨逊漂流记》短语合集
  10. 文章读取 'gbk' codec can't decode byte 0x9d in position 1793: illegal multibyte sequence