JDK 25 新特性概览
发布日期:2025 年 9 月 16 日 类型:长期支持版本(LTS)
总览
JDK 25 包含约 18 项 JEP(Java Enhancement Proposals)新特性,这些特性覆盖语言语法、并发模型、JVM 性能优化、安全性增强等多个方面。
新特性详解
以下是几个重要的新特性及其作用/影响:
| 特性 | 状态 | 描述 | 优势 / 注意事项 |
|---|---|---|---|
| 紧凑源文件 & 实例主方法(Compact Source Files and Instance Main Methods,JEP 512) | 最终特性 | 简化 Java 程序入口,可写无类声明的 void main() 方法;引入 java.lang.IO 简化控制台 I/O;自动导入 java.base 模块中的公共顶级类等。 | 降低入门门槛,对脚本、教学、原型开发等非常友好。注意兼容性方面,静态导入等行为有调整。 |
| 原始类型模式匹配(Primitive types in patterns, instanceof, switch,JEP 507) | 第三次预览 | 支持在 instanceof、switch 等上下文中匹配原始类型(如 int, boolean 等)。 | 减少装箱/拆箱代码,增强语法表达力;仍是预览,可能会有语义或兼容性细节需要小心。 |
| 结构化并发(Structured Concurrency) | 预览 | 将多个相关任务当做一个 “工作单元” 管理,简化错误处理和取消操作。 | 提高并发代码的可靠性和资源管理;预览阶段,API 可能还有调整。 |
| 作用域值(Scoped Values) | 概念推出中 | 用来在线程内或跨线程共享不可变状态,比 ThreadLocal 更轻量、生命周期绑定作用域避免内存泄漏。 | 性能优势(内存/速度),特别在使用虚拟线程时;但旧代码迁移可能要注意。 |
| 紧凑对象头(Compact Object Headers) | 正式特性 | 将对象头从默认大小压缩,从而节省内存。 | 对于大量小对象场景效果显著;某些与对象头布局强相关的工具或库可能受影响。 |
| Shenandoah 垃圾收集器的分代模式(Generational Shenandoah GC) | 正式特性 | 在 Shenandoah GC 中加入 “代” 的概念(年轻代/老年代)以优化 GC 性能。 | 减少停顿时间,提高性能;需要在 JVM 启动参数中启用相应模式。 |
| Flight Recorder (JFR) 增强 | 实验/预览 | 包含:在 Linux 上支持 CPU‐time profiling;合作抽样(cooperative sampling);方法级别的时间测量与追踪等。 | 更精细的性能数据帮助调优;可能有平台差异或开销,需要评估。 |
| 安全 / 加密相关增强 | 预览/标准化中 | 引入 PEM 编码/解码 API;抗量子密钥封装机制(ML-KEM)和抗量子数字签名算法(ML-DSA)等。 | 提升算法现代性和未来抗量子安全性;预览功能,可能会有 API 变动或性能考量。 |
| 移除 / 弃用 | 正式 | 移除对 32 位 x86 平台支持。 | 如果部署环境还在使用 32 位 x86,需要评估迁移成本。 |
部分其他改进/特性列表
- 模块导入声明(Module Import Declarations)预览功能。
- 密钥派生函数 API(Key Derivation Functions API)预览。
- 向量 API(Vector API)的增强/稳定性改进。
- JDK 启动时的 Ahead-Of-Time 方法分析/缓存改进,以加快启动与预热时间。
升级建议 / 注意事项
- 虽然许多新特性十分有用,但其中一些仍处于预览阶段。若用于生产环境,要评估风险、测试兼容性。
- 某些语言特性(如原始类型模式匹配、结构化并发等)的 API 在未来版本可能有变动。
- 性能/内存优化特性(如紧凑对象头、Shenandoah 分代 GC)开启时可能需要额外监控和调优。
- 部署环境方面要确认平台支持,比如移除了 32 位 x86 支持。
- 若项目依赖第三方库或工具,这些库/工具可能依赖对象头布局、工具链假设等,升级可能会引入兼容性问题。
结语
JDK 25 是一个里程碑式的版本,作为新的 LTS,其带来了语言学习曲线的简化、并发与性能的大幅提升,以及现代安全性的加强。对于新项目或那些能接受预览特性、愿意投入适当测试/调整的现有项目,升级会有很高的价值。