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 |
从 JDK7 到JDK25 所有新特性,以及废弃API说明
JDK 7
- 新特性
- try-with-resources:自动关闭资源,如
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {... }。 - 钻石操作符(Diamond Operator):简化泛型实例化,如
List list = new ArrayList<>();。 - 字符串切换(String in Switch):允许
switch语句使用字符串。 - NIO.2:增强的文件系统 API,支持路径操作、文件监控等。
- Fork/Join 框架:支持分治算法的并行计算。
- try-with-resources:自动关闭资源,如
- 废弃 API:无明确大规模废弃 API,主要是一些小的内部调整。
JDK 8
- 新特性
- Lambda 表达式:引入函数式编程支持,如
list.forEach(item -> System.out.println(item));。 - Stream API:对集合进行声明式数据处理,如
list.stream().filter(s -> s.length() > 3).collect(Collectors.toList());。 - 默认方法(Default Methods):接口中可定义默认实现。
- 新的日期时间 API(java.time 包):替代
Date和Calendar。 - Optional 类:避免空指针异常。
- Lambda 表达式:引入函数式编程支持,如
- 废弃 API:无明确大规模废弃 API,主要是一些小的内部调整。
JDK 9
- 新特性
- 模块化系统(JPMS):通过
module - info.java定义模块。 - 私有化 JDK 内部 API:减少对
sun.misc等包的依赖。 - HTTP Client(Preview):内置 HTTP 客户端(
java.net.http包)。 - JShell:交互式 Java REPL(Read - Eval - Print Loop)。
- 集合工厂方法:简化不可变集合创建,如
List.of("a", "b", "c");。
- 模块化系统(JPMS):通过
- 废弃 API:无明确大规模废弃 API,主要是内部 API 的调整。
JDK 10
- 新特性
- 局部变量类型推断(var):通过
var声明局部变量,如var list = new ArrayList<>();。 - 应用类数据共享(AppCDS):减少 JVM 内存占用。
- 垃圾回收器改进:并行垃圾回收器(Parallel GC)默认替换 CMS。
- 局部变量类型推断(var):通过
- 废弃 API:无明确大规模废弃 API,主要是内部调整。
JDK 11
- 新特性
- HTTP Client 正式版:从 Preview 升级为稳定版本。
- Windows 上的 Flight Recorder(JFR):性能分析工具。
- 新的垃圾回收器 ZGC:低延迟垃圾回收器(实验性)。
- 文本块(Text Blocks):多行字符串支持。
- 废弃 API:删除 Java EE 模块,如
java.xml.bind等。
JDK 12
- 新特性
- Switch 表达式(Preview):支持
yield和表达式形式。 - Shenandoah GC:低暂停时间的垃圾收集器(实验性)。
- Switch 表达式(Preview):支持
- 废弃 API:无明确大规模废弃 API。
JDK 13
- 新特性
- 文本块(预览特性):多行字符串文字。
- 增强的动态类数据共享(CDS):提高启动时间和性能。
- 废弃 API:无明确大规模废弃 API。
JDK 14
- 新特性
- 记录(Records)(预览特性):简化的数据载体类,如
record Point(int x, int y) { }。 - NullPointerException 增强:更详细的空指针异常信息。
- 记录(Records)(预览特性):简化的数据载体类,如
- 废弃 API
- CMS 垃圾收集器:已被删除,相关 JVM 标志如
-XX:UseConcMarkSweepGC等都已废弃。 - 安全库 java.security.acl API:被删除。
- CMS 垃圾收集器:已被删除,相关 JVM 标志如
JDK 15
- 新特性
- 文本块:正式发布,简化多行字符串文字。
- 封闭类(Sealed Classes)(预览特性):限制哪些类可以扩展或实现。
- 废弃 API:无明确大规模废弃 API。
JDK 16
- 新特性
- 记录(Records):正式发布,用于数据封装。
- 模式匹配:
instanceof操作符的模式匹配简化,如if (obj instanceof String s) {... }。
- 废弃 API:无明确大规模废弃 API。
JDK 17
- 新特性
- Switch 表达式:新增了匹配模式,使得 Switch 语句的功能更加强大。
- 文件系统改进:对标准文件 I/O 的增强,新的 API 提供了更直接和高效的方法来访问和操作文件。
- 废弃 API
- JavaFX 模块:被移除。
- Nashorn JavaScript 引擎:被移除。
JDK 18
- 新特性
- UTF - 8 by Default:将 UTF - 8 作为默认的字符集。
- Simple Web Server:提供一个简单的命令行工具和 API,用于启动一个轻量级的 HTTP 文件服务器。
- 可执行代码片段:允许在 Java API 文档中添加可执行的代码片段,这些代码片段可以被自动编译和测试。
- 废弃 API
- Applet API:已废弃。
- Security Manager:计划在未来的版本中逐步移除。
JDK 19
- 新特性
- 虚拟线程(Virtual Threads)(预览):改进的线程模型,便于并发编程。
- 结构化并发(预览):简化多线程的错误处理和取消操作。
- 废弃 API
- Locale 类构造函数:被标记为 “弃用”,建议使用
Locale.of()静态工厂方法。 - ThreadGroup 相关方法:如
ThreadGroup.destroy()、ThreadGroup.isDestroyed()等方法在 Java 19 中已被停用或抛出异常。
- Locale 类构造函数:被标记为 “弃用”,建议使用
JDK 20Oracle
- 新特性
- 记录模式(预览):增强 Java 编程语言的记录模式,以解构记录值。
- 废弃 API:无明确大规模废弃 API。
JDK 21
- 新特性
- String Templates(预览版):一种新的字符串拼接方法。
- Sequenced Collections:引入新的接口来表示具有定义相遇顺序的集合。
- Generational ZGC:通过扩展 Z 垃圾收集器,为新旧对象分别保留不同的世代,提高应用程序的性能。
- 废弃 API:无明确大规模废弃 API。
从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