Java 开发者必备:JDK 版本详解与选择策略(含安装与验证)

简介: Oracle Java SE 支持路线图显示,JDK 8(LTS)支持至2030年,非LTS版本如9-11每6个月发布且支持有限。JDK 11(LTS)支持至2032年,而JDK 17及以上版本现在提供免费商用许可。LTS版本提供长达8年的支持,每2年发布一次。Oracle JDK与OpenJDK有多个社区和公司构建版本,如Adoptium、Amazon Corretto和Azul Zulu,它们在许可证、商业支持和更新方面有所不同。个人选择JDK时,可考虑稳定性、LTS、第三方兼容性和提供商支持。

1. JDK 版本 (Oracle Java SE 支持路线图)

数据来源:Oracle Java SE 支持路线图 | 甲骨文中国: https://www.oracle.com/cn/java/technologies/java-se-support-roadmap.html
版本 GA Date Premier Support Until Extended Support Until(限 LTS)
8 (LTS) 2014 年 3 月 2022 年 3 月 2030 年 12 月
9 - 10 (non-LTS) 2017 年 9 月 - 2018 年 3 月 2018 年 3 月 - 2018 年 9 月 /
11 (LTS) 2018年9月 2023 年 9 月 2032 年 1 月
12 - 16 (non-LTS) 2019 年 3 月 - 2021 年 3 月 2019 年 9 月 - 2021 年 9 月 /
17 (LTS) 2021 年 9 月 2026 年 9 月或延期 2029 年 9 月或延期
18 - 20 (non-LTS) 2022 年 3 月 - 2023 年 3 月 2022 年 9 月 - 2023 年 9 月 /
21 (LTS) 2023 年 9 月 2028 年 9 月或延期 2031 年 9 月或延期
22 (non-LTS) 2024 年 3 月 2024 年 9 月 /
  • JDK 的标准更新周期为 6 个月
  • Java SE 8 的公共更新已经结束,将不再提供免费商用更新。
  • Oracle 自 2017 年 9 月开始提供 基于 GPLv2 开源的 Oracle OpenJDK
  • Oracle JDK 16 及以前的版本不可免费商用(详情
  • Oracle JDK 17 及以上版本,自 2021 年 9 月起,提供免费使用许可(详情

1.1. LTS 版本说明

LTS,原名 Long-Term Support 长期支持,正常情况下 当 JDK 12 正式发布后 JDK 11 将失效,但是由于 JDK 11 是 LTS 版本,所以会延长支持更新至 2032 年。

LTS 版本更加注重稳定性,安全性,性能改进,默认支持是 8 年,其中 JDK 8 延长至 2030 年(16年),延长支持期间不再提供新的功能。

LTS 版本自 2021 年起,从 3 年发布一次更改为 2 年一次(详情

1.1.1. 参考

The art of long-term support and what LTS means for the Java ecosystem: https://blogs.oracle.com/javamagazine/post/java-long-term-support-lts

2. JDK 概览

由于 Oracle 开源了 JDK,很多社区以及公司根据 Oracle Open JDK 构建了自己的 JDK,使开发者有了更加丰富的选项,一些社区或公司会根据自己的生产环境针对 JDK 进行调整,例如 Amazon Corretto JDK 优化了在 AWS 等云平台的使用体验,以下为 JDK 概览

表格数据来源(空白单元格表示未找到相关数据):
https://stackoverflow.com/a/52431765/15599248
https://www.baeldung.com/oracle-jdk-vs-openjdk
Provider Free Builds from Source Free Binary Distributions Extended Updates Commercial Support Permissive License Website
Adopt Open JDK/Adoptium Yes Yes Yes No Yes https://adoptopenjdk.net
Amazon Corretto Yes Yes Yes No Yes https://aws.amazon.com/corretto
Azul Zulu No Yes Yes Yes Yes https://www.azul.com/downloads/zulu/
BellSoft Liberica No Yes Yes Yes Yes https://bell-sw.com/java.html
IBM No No Yes Yes Yes https://www.ibm.com/developerworks/java/jdk
jClarity No No Yes Yes Yes
OpenJDK Yes Yes Yes No Yes https://adoptopenjdk.net/upstream.html
Oracle JDK No Yes No Yes No https://www.oracle.com/technetwork/java/javase/downloads
Oracle OpenJDK Yes Yes No No Yes https://jdk.java.net
ojdkbuild Yes Yes No No Yes https://github.com/ojdkbuild/ojdkbuild
RedHat Yes Yes Yes Yes Yes https://developers.redhat.com/products/openjdk/overview
SapMachine Yes Yes Yes Yes Yes https://sap.github.io/SapMachine
Microsoft JDK Yes Yes Yes Yes Yes https://learn.microsoft.com/zh-cn/java/openjdk/
  • Free Builds from Source - 发行版源代码是公开的,人们可以组装自己的构建版本
  • Free Binary Distributions - 发行版二进制文件可以公开下载和使用
  • Extended Updates - 也被称为LTS(长期支持),指的是发布周期超过6个月的公开更新。
  • Commercial Support - 一些提供商为满足条件的付费客户提供扩展更新和客户支持,例如Oracle JDK(详情)。
  • Permissive License - 软件许可证是非保护性的 (non-protective),例如Apache 2.0

3. JDK 选择参考(个人向)

一般根据生产/测试环境选择,例如 AWS 环境就选择 Amazon Corretto;当没有生产环境限制时,选择 JDK 可以综合考虑 LTS 版本、第三方要求(例如Spring)、开源可商用以及维护者实力等因素。

3.1. 选择 adoptium 主要参考

  1. adoptium 由 Eclipse 基金会提供支持和维护,具有一定的稳定性。
  2. adoptium 的口碑一直相对优秀。

3.2. 选择 Microsoft OpenJDK 主要参考

Microsoft Build of OpenJDK 二进制文件基于 OpenJDK 源代码,遵循 Eclipse Adoptium 项目使用的相同生成脚本,并根据 Eclipse Adoptium 质量保证套件(包括 OpenJDK 项目测试)进行了测试。我们正式发布的二进制文件已通过 Java 技术兼容性工具包 (TCK) 的测试,该工具包用于验证与 Java 规范的兼容性。Microsoft Build of OpenJDK 是 Java 生态系统中可用的任何其他 OpenJDK 分发版的普适性替代产品。
https://learn.microsoft.com/zh-cn/java/openjdk/overview
  1. Microsoft OpenJDK 由 Microsoft 提供维护,具有一定的稳定性。
  2. Microsoft OpenJDK 下载比较稳定且方便,在一些紧急情况,例如给他人或陌生环境部署,会更加合适;(adoptium 有时下载速度较慢,Redhat 需要注册才能下载)

3.3. 扩展

  1. Redhat 对于 JDK 长期维护的支持与声明,mi-openjdk-datasheet-f17057cs-201908-a4-zh.pdf: https://www.redhat.com/rhdc/managed-files/mi-openjdk-datasheet-f17057cs-201908-a4-zh.pdf

3.4. JDK 安装

环境:Windows 11
  1. 选择并下载合适版本的压缩包(我一般选择 zip 压缩包,方便自己配置)

adoptium-jdkg

  1. 解压到自己常用的 JDK 安装目录中即可
  2. 在系统/用户环境变量中设置 JAVA_HOME

    1. MAVEN 等程序需要 JAVA_HOME 所以不建议省略
  3. bin 目录添加到系统/用户环境变量的 Path

3.5. JDK 验证

cmd/powershell 中运行以下命令

java --version

返回参考(长时间无响应,或者查找不到命令,则表明配置错误)

openjdk 21.0.2 2024-01-16 LTS
OpenJDK Runtime Environment Temurin-21.0.2+13 (build 21.0.2+13-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.2+13 (build 21.0.2+13-LTS, mixed mode, sharing)

运行以下命令

javac --version

返回参考

javac 21.0.2

4. 参考

  1. Oracle Java SE 支持路线图 |甲骨文中国: https://www.oracle.com/cn/java/technologies/java-se-support-roadmap.html
  2. java - OpenJDK 和 Adoptium/AdoptOpenJDK 之间的区别 - stackoverflow: https://stackoverflow.com/questions/52431764/difference-between-openjdk-and-adoptium-adoptopenjdk
  3. OpenJDK, an open source alternative to Oracle JDK: https://www.redhat.com/en/resources/build-of-openjdk-datasheet
  4. What Does Long-Term Support Mean for OpenJDK? | Java Code Geeks - 2021: https://www.javacodegeeks.com/2019/07/long-term-support-mean-openjdk.html

<!--
Copyright © 2024 github.com/cc01cc

本页面- 本作品采用署名-相同方式共享 4.0 国际(CC BY-SA 4.0 DEED)许可证进行许可。

转载请注明原始地址:https://cc01cc.cn/
-->

相关文章
|
2月前
|
安全 Java 编译器
JDK 10中的局部变量类型推断:Java编程的简化与革新
JDK 10引入的局部变量类型推断通过`var`关键字简化了代码编写,提高了可读性。编译器根据初始化表达式自动推断变量类型,减少了冗长的类型声明。虽然带来了诸多优点,但也有一些限制,如只能用于局部变量声明,并需立即初始化。这一特性使Java更接近动态类型语言,增强了灵活性和易用性。
127 53
|
2月前
|
Oracle 安全 Java
深入理解Java生态:JDK与JVM的区分与协作
Java作为一种广泛使用的编程语言,其生态中有两个核心组件:JDK(Java Development Kit)和JVM(Java Virtual Machine)。本文将深入探讨这两个组件的区别、联系以及它们在Java开发和运行中的作用。
126 1
|
2月前
|
IDE Java 编译器
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
107 1
|
2月前
|
Java Linux Windows
如何查看已安装的 Java 版本
要查看已安装的 Java 版本,打开命令提示符或终端,输入 `java -version`,回车后即可显示当前系统中 Java 的版本信息。
1110 1
|
2月前
|
Ubuntu Java Linux
如何检查 Java 版本是否兼容
要检查Java版本是否兼容,可在命令行输入“java -version”查看当前安装的Java版本,然后对比目标应用所需的Java版本,确保其满足要求。
103 1
|
3月前
|
Java Spring 数据库连接
[Java]代理模式
本文介绍了代理模式及其分类,包括静态代理和动态代理。静态代理分为面向接口和面向继承两种形式,分别通过手动创建代理类实现;动态代理则利用反射技术,在运行时动态创建代理对象,分为JDK动态代理和Cglib动态代理。文中通过具体代码示例详细讲解了各种代理模式的实现方式和应用场景。
54 0
[Java]代理模式
|
3月前
|
Java 关系型数据库 MySQL
【编程基础知识】Eclipse连接MySQL 8.0时的JDK版本和驱动问题全解析
本文详细解析了在使用Eclipse连接MySQL 8.0时常见的JDK版本不兼容、驱动类错误和时区设置问题,并提供了清晰的解决方案。通过正确配置JDK版本、选择合适的驱动类和设置时区,确保Java应用能够顺利连接MySQL 8.0。
335 1
|
3月前
|
Java
让星星⭐月亮告诉你,jdk1.8 Java函数式编程示例:Lambda函数/方法引用/4种内建函数式接口(功能性-/消费型/供给型/断言型)
本示例展示了Java中函数式接口的使用,包括自定义和内置的函数式接口。通过方法引用,实现对字符串操作如转换大写、数值转换等,并演示了Function、Consumer、Supplier及Predicate四种主要内置函数式接口的应用。
35 1
|
3月前
|
Java Maven Spring
查看springboot版本支持最高的java版本
截至最近更新,Spring Boot 3.0及以上版本支持的最高Java版本为Java 17。鉴于技术的不断演进,建议直接参考Spring Boot的官方文档获取最准确的支持信息,因为这些版本兼容性可能会随着新版本的发布而有所变化。选择与你的Spring Boot版本相匹配的Java版本,可以确保充分利用框架特性,同时保证项目的稳定性和前瞻性。
132 0
|
14天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
69 17