JDK版本说明
发行日志
JDK Release Notes (oracle.com)
Class 版本对照表
Java SE | 推荐版本 | Released | TLCS | Major | Supported majors | URL |
---|---|---|---|---|---|---|
1.102 | May-1996 | N | 45 | 45 | ||
1.1 | February-1997 | N | 45(0x2D hex) | 45 | ||
1.2 | December-1998 | N | 46(0x2E hex) | 45 .. 46 | ||
1.3 | May-2000 | N | 47(0x2F hex) | 45 .. 47 | ||
1.4 | February-2002 | N | 48(0x30 hex) | 45 .. 48 | ||
5 | September-2004 | N | 49(0x31 hex) | 45 .. 49 | ||
6 | December-2006 | N | 50(0x32 hex) | 45 .. 50 | Java SE 6 Update Release Notes (oracle.com) Java SE 6 Advanced (oracle.com) | |
7 | July-2011 | N | 51(0x33 hex) | 45 .. 51 | Java SE 7 Advanced (oracle.com) | |
8 | 1.8.0_461-b11 | March-2014 | Y | 52(0x34 hex) | 45 .. 52 | Consolidated JDK 8 Release Notes (oracle.com) |
9 | September-2017 | N | 53(0x35 hex) | 45 .. 53 | Java Development Kit 9 Update Release Notes (oracle.com) | |
10 | March-2018 | N | 54(0x36 hex) | 45 .. 54 | Java Development Kit 10 Update Release Notes (oracle.com) | |
11 | 11.0.28+12 | September-2018 | Y | 55(0x37 hex) | 45 .. 55 | JDK 11 Documentation - Home |
12 | March-2019 | N | 56(0x38 hex) | 45 .. 56 | JDK 12 Documentation - Home | |
13 | September-2019 | N | 57(0x39 hex) | 45 .. 57 | JDK 13 Documentation - Home | |
14 | March-2020 | N | 58(0x3A hex) | 45 .. 58 | JDK 14 Documentation - Home | |
15 | September-2020 | N | 59(0x3B hex) | 45 .. 59 | JDK 15 Documentation - Home | |
16 | March-2021 | N | 60(0x3C hex) | 45 .. 60 | JDK 16 Documentation - Home | |
17 | 17.0.16+12 | September-2021 | Y | 61(0x3D hex) | 45 .. 61 | JDK 17 Documentation - Home |
18 | March-2022 | N | 62 | 45 .. 62 | JDK 18 Documentation - Home | |
19 | September-2022 | N | 63 | 45 .. 63 | JDK 19 Documentation - Home | |
20 | March-2023 | N | 64 | 45 .. 64 | JDK 20 Documentation - Home | |
21 | 21.0.8+12 | September-2023 | Y | 65 | 45 .. 65 | JDK 21 Documentation - Home |
22 | March-2024 | N | 66 | 45 .. 66 | JDK 22 Documentation - Home | |
23 | 17 September 2024 | NN | JDK 23 Documentation - Home | |||
24 | 24.0.2+12 | 18 March 2025 | N | JDK 24 Documentation - Home |
从JDK8以来的新特性
JDK 8
原文链接
新特性
废弃
预览功能
JDK 11
原文链接
新特性
废弃
预览功能
JDK17
原文链接
新特性
废弃
预览功能
JDK21
原文链接
新特性
废弃
预览功能
JDK24
原文链接
新特性
1. 语言预览
➜ Patterns、instanceof 和 switch 中的基元类型(第二个预览版)
通过在所有模式上下文中允许原始类型来增强模式匹配, 并扩展并适用于所有原始类型。这是一项预览语言功能。instanceof``switch
➜ 灵活构造函数主体(第三个预览版)
在 Java 编程语言的构造函数中,允许语句出现 在显式构造函数调用之前,即 或 .这 语句不能引用正在构造的实例,但可以 初始化其字段。在调用另一个构造函数之前初始化字段 当方法被重写时,使类更可靠。这是一个预览 语言功能。super(..)``this(..)
➜ 模块导入声明(第二次预览)
增强 Java 编程语言,能够简洁地导入所有 模块导出的包。这简化了模块化 库,但不需要导入代码位于模块本身中。 这是一项预览语言功能。
➜ 简单的源文件和实例主要方法(第四次预览)
发展 Java 编程语言,以便初学者可以编写他们的第一个 无需理解专为大型设计的语言功能的程序 程序。初学者远没有使用单独的语言方言,而是可以写作 简化单类程序的声明,然后无缝扩展 随着技能的增长,他们的程序使用更高级的功能。经历 开发人员同样可以享受简洁地编写小程序的乐趣,而无需 需要用于大型编程的结构。这是一个预览 语言功能。
2. 性能和运行时间
➜ 紧凑型对象标头(实验性)
在 64 位架构上,将 HotSpot JVM 中对象标头的大小从 96 到 128 位减小到 64 位。这将减小堆大小、提高部署密度并增加数据局部性。
➜ G1 的后期障碍扩展
通过将 G1 垃圾收集器屏障的扩展从 C2 JIT 编译管道的早期转移到后期,简化 G2 垃圾收集器屏障的实现,这些屏障记录有关应用程序内存访问的信息。
➜ 提前类加载和链接
通过在 HotSpot Java 虚拟机启动时使应用程序的类在加载和链接状态下立即可用来缩短启动时间。通过在一次运行期间监视应用程序并将所有类的加载和链接形式存储在缓存中以供后续运行使用来实现此目的。为未来改进启动和预热时间奠定基础。
➜ 无需固定即可同步虚拟线程
通过安排阻塞此类构造的虚拟线程释放其底层平台线程以供其他虚拟线程使用,提高使用方法和语句的 Java 代码的可伸缩性。这将消除几乎所有虚拟线程固定到平台线程的情况,这严重限制了可用于处理应用程序工作负载的虚拟线程数。synchronized
3. 类库
➜ 溪流采集者
增强 Stream API 以支持自定义中间作。这将允许流管道以现有内置中间作不容易实现的方式转换数据。
➜ 类文件 API
提供用于解析、生成和转换 Java 类文件的标准 API。
➜ 作用域值(第四个预览版)
引入作用域值,使方法能够与线程中的被调用方以及子线程共享不可变数据。作用域值比线程局部变量更容易推理。它们还具有较低的空间和时间成本,特别是当与虚拟线程 (JEP 444) 和结构化并发 (JEP 480) 一起使用时。这是一个预览 API。
➜ Vector API(第九孵化器)
引入一个 API 来表达矢量计算,这些计算在运行时可靠地编译为受支持的 CPU 架构上的最佳矢量指令,从而实现优于等效标量计算的性能。
➜ 结构化并发(第四次预览)
通过引入结构化并发 API 来简化并发编程。结构化并发将不同线程中运行的相关任务组视为单个工作单元,从而简化错误处理和取消,提高可靠性并增强可观测性。这是一个预览 API。
3.1 安全库
➜ 密钥派生函数 API(预览版)
引入密钥派生函数 (KDF) 的 API,这是一种用于从密钥和其他数据派生其他密钥的加密算法。这是一个预览 API。
➜ 抗量子模块-基于晶格的密钥封装机制
通过提供抗量子基于模块格的密钥封装机制 (ML-KEM) 的实现来增强 Java 应用程序的安全性。密钥封装机制 (KEM) 用于使用公钥加密技术通过不安全的通信通道保护对称密钥。ML-KEM 旨在抵御未来的量子计算攻击。它已由美国国家标准与技术研究院 (NIST) 在 FIPS 203 中标准化。
➜ 基于量子模块的基于晶格的数字签名算法
通过提供 基于模块晶格的抗量子数字签名算法(ML-DSA)。数字签名用于检测未经授权的数据修改并验证签名者的身份。ML-DSA 旨在抵御未来的量子计算攻击。它已被美国标准化 国家标准与技术研究院 (NIST) 在 FIPS 204 中。
4. 未来更改的删除和警告
➜ 准备限制使用 JNI
发出有关 Java 本机接口 (JNI) 使用情况的警告,并调整外部函数和内存 (FFM) API 以一致的方式发出警告。所有这些警告都旨在让开发人员为未来的版本做好准备,该版本通过统一限制 JNI 和 FFM API 来确保默认情况下的完整性。应用程序开发人员可以通过在必要时有选择地启用这些接口来避免当前警告和未来的限制。
➜ 永久禁用安全管理器
多年来,安全管理器并不是保护客户端 Java 代码的主要手段,它很少用于保护服务器端代码,而且维护成本很高。因此,我们弃用它,以便在 Java 17 中通过 JEP 411 (2021) 删除它。作为删除 Security Manager 的下一步,我们将修改 Java Platform 规范,以便开发人员无法启用它,并且其他 Platform 类不会引用它。此更改不会对绝大多数应用程序、库和工具产生影响。我们将在将来的版本中删除 Security Manager API。
➜ ZGC:删除非代模式
删除 Z 垃圾回收器 (ZGC) 的非分代模式,将分代模式保留为 ZGC 的默认模式。
➜ 在 sun.misc.Unsafe 中使用内存访问方法时发出警告
在运行时首次调用任何内存访问方法时发出警告。所有这些不受支持的方法在 JDK 23 中都已最终弃用。它们已被标准 API 所取代,即 VarHandle API(JEP 193,JDK 9)和外部函数和内存 API(JEP 454,JDK 22)。我们强烈建议库开发人员从受支持的替换版本迁移到受支持的替换版本,以便应用程序可以顺利迁移到现代 JDK 版本。sun.misc.Unsafe``sun.misc.Unsafe