“我用Java 8”已成过去式,Java 25正式发布:Oracle提供八年更新、18项新功能上线
作为曾经的编程语言王者,如今 Java 的更新速度令无数开发者望尘莫及,转瞬间,其版本已经来到了 25。
值得注意的是,Oracle 最新发布的 Java 25 是最新的长期支持(LTS)版本,回看上一版 LTS 还是 2023 年 9 月推出的 JDK 21。相比常规的半年期版本,LTS 版本将获得更长周期的维护与支持——JDK 25 将获得至少 8 年的 Oracle Premier 商业支持。
简单来说,按照 Oracle 的计划,JDK 25 会在 2028 年 9 月之前,按季度提供免费的安全和性能更新,遵循 NFTC(No-Fee Terms and Conditions)许可;在那之后,更新会转到 Java SE OTN(Oracle Technology Network License Agreement)许可下继续提供,预计至少会持续到 2033 年 9 月。
在此,我们也稍作解释:相比 NFTC,OTN 是一个更严格的免费使用许可。它允许开发者在开发和测试中免费使用 Java SE,但如果要在生产环境、大规模商用部署中长期使用,就需要从 Oracle 购买商业支持。换句话说,OTN 更像是一个“开发免费、商用需付费”的模式。
据 Oracle 公告显示,此番 Java 25 共计带来了 18 项功能更新,其中 5 项 Oracle 宣称可以助力 AI 开发。
接下来,我们不妨看看这些值得开发者关注的新功能。
语言的改进
在语言层面,JDK 25 带来了第三次预览的原始类型模式匹配,拓展了 instanceof 和 switch 对原始类型的支持。开发者可以在各种模式上下文中直接操作原始类型,这让 Java 语法更一致、更具表达力,也减少了因强制类型转换带来的风险。该特性最早在 JDK 23 提出,并在 JDK 24 跟进,如今依然处于预览阶段。
在模块化方面,模块导入声明能让开发者一次性导入整个模块输出的所有包,减少大量重复的 import 声明。这一设计对初学者尤为友好,也能简化第三方库的使用。
简化源码文件与实例化 main 方法也将在 JDK 25 正式定型。它让初学者能用最简单的方式编写 Java 程序,无需一开始就理解复杂的语言特性。对有经验的开发者来说,这一机制同样方便编写小型程序,减少不必要的样板代码。
灵活构造函数体也将在 JDK 25 中定型。该特性允许开发者在显式调用 super(...) 或 this(...) 之前编写安全语句(如字段初始化),从而让构造函数表达更自然,也能确保对象在对外可见前已经被安全初始化。
Oracle JDK 25 库更新
结构化并发在 JDK 25 进入第五次预览。它将一组相关的并发任务视为一个整体进行管理,能简化错误处理和任务取消,提升可靠性和可观测性。新版本中,StructuredTaskScope 的创建方式改为静态工厂方法,简化了常见使用场景的书写。
作用域值在 JDK 25 中也终于将定型。这个特性允许方法在同一线程及其子线程之间共享不可变数据,相比传统的线程局部变量更轻量,也更容易推理和理解。它经过多轮预览(从 JDK 21 到 JDK 24)不断打磨,在 JDK 25 中会被正式确定,同时对 API 做了小幅调整,例如 ScopedValue.orElse 方法将不再接受 null 参数。
稳定值(Stable Values) 作为预览特性,则提供了一种更灵活的方式来处理不可变数据。它们被 JVM 视为常量,因此能够启用类似 final 字段的性能优化,同时又允许在初始化时机上更自由。这不仅能改进应用启动性能,还能保证多线程下数据的安全初始化。
向量 API 再次进入孵化阶段,这是它在 JDK 中的第十次亮相。该 API 旨在让 Java 能够利用 CPU 的向量指令,从而比标量计算更高效。在 JDK 25 中,它进行了两项重要改进:其一,底层数学函数的实现从 HotSpot JVM 内部的 C++ 代码迁移到通过外部函数与内存 API 调用原生数学库,提升了可维护性;其二,在支持的 x64 CPU 上,Float16 类型的加减乘除、平方根和乘加运算现在能自动向量化。此外,VectorShuffle 也新增了与 MemorySegment 的互操作。
安全库
在安全与加密方面,JDK 25 预览了 PEM(Privacy-Enhanced Mail)加密对象编码的简洁 API。通过这一功能,开发者可以更方便地在常见的 PEM 格式与 Java 加密对象之间进行转换,例如密钥、证书以及证书吊销列表。过去,Java 平台并没有易用的 PEM 编解码 API。新特性的目标之一就是提升易用性,同时也支持与标准二进制格式的互转,包括 PKCS#8(私钥)、X.509(公钥、证书与吊销列表)以及 PKCS#8 v2.0(加密私钥与非对称密钥)。
在加密领域,JDK 25 将正式提供密钥派生函数 API(Key Derivation Function API)。它支持通过算法从已有的秘密密钥和数据中派生新密钥,这对于面向量子计算的未来安全环境尤其重要。该 API 支持包括 HMAC 基础的密钥派生函数(HKDF)和 Argon2 等算法,还能用于密钥封装机制(如 ML-KEM)、TLS 1.3 中的混合密钥交换,以及混合公钥加密等高级协议。它在 JDK 24 曾经预览,如今在 JDK 25 中正式落地。
安全、性能的提升
另一个正式登场的功能是紧凑对象头(Compact Object Headers)。它最初在 JDK 24 以实验形式出现,如今已经被证明在稳定性和性能上表现出色。该功能将 HotSpot JVM 中对象头的大小,从原本的 96 位到 128 位压缩到 64 位(在 64 位架构上),从而减小堆内存占用,提高部署密度和数据局部性。
为了进一步改善应用的启动体验,JDK 25 还引入了提前编译命令行改进和提前方法分析。前者让开发者更容易创建提前编译(AOT)缓存,从而加快 Java 应用启动速度,同时避免新增复杂的工作流,保持使用体验的简洁一致。后者则通过复用应用在上一次运行时收集到的方法执行信息,让即时编译器(JIT)在应用启动时就能立刻生成高效的本地代码,而不用等待新的性能数据积累。这意味着应用可以更快“热身”,并且无需修改现有代码或框架。实际上,这一特性是对 JDK 24 中 AOT 缓存机制的扩展。
在性能分析方面,JDK 25 对 JDK Flight Recorder(JFR) 进行了重要增强,引入了 CPU 时间分析功能。JFR 是 JDK 的性能监测与分析工具。新版本利用 Linux 内核的 CPU 计时器,能够更精确地生成 Java 程序的 CPU 时间分析报告,帮助开发者优化在 Linux 上运行的应用效率。这一特性目前属于实验性质,未来有可能扩展到其他平台。值得一提的是,JDK 25 与 JFR 相关的增强共有三项:除了 CPU 时间分析之外,还有协作采样以及方法执行时序与追踪功能。
同时,JDK 25 还改进了 JDK Flight Recorder(JFR) 的稳定性,推出协作采样功能。在异步采样 Java 线程栈时,新机制会选择在安全点(safepoint)执行调用栈遍历,从而减少采样误差,让性能分析结果更加可靠。
不止如此,JDK 25 为 JDK Flight Recorder(JFR)加入了新的方法执行时序与追踪功能。这意味着开发者无需通过字节码插桩,也能记录特定方法的执行时间和调用栈信息,而且不需要修改源代码。方法可以通过命令行参数、配置文件、jcmd 工具,甚至是 Java 管理扩展(JMX)API 远程指定。借助这一能力,开发者能够更轻松地定位性能瓶颈、优化代码,甚至追踪 Bug 的根源。
在垃圾回收方面,JDK 25 将分代 Shenandoah 垃圾回收器(Generational Shenandoah GC) 从实验功能升级为正式特性。该回收器最早在 JDK 24 中预览,并在稳定性和性能上得到了显著提升。它的目标是提升 Java 程序的可持续吞吐量,应对负载突发带来的压力,并优化内存利用率。一些开发者已经在高负载的场景中测试过这一回收器,反馈较为积极。其实,分代 Shenandoah 原计划在 2023 年的 JDK 21 中推出,但当时因为尚未成熟而被推迟。
JDK 25 还会正式移除对 32 位 x86 的支持。这一移植版本在 JDK 24 就已经被标记为弃用,如今彻底移除后,OpenJDK 社区可以集中精力推进新特性和优化,比如外部函数与内存 API 的演进。
最后,虽然不在官方功能清单中,Oracle 还透露 JDK 25 在字符串(String)性能上也有提升,String::hashCode 方法现在能借助编译器的常量折叠优化,从而让字符串作为不可变 Map 键时获得显著的性能加速。
“你发任你发,我用 Java 8”已成为过去式!
对于 Java 25 的正式发布,虽然不少网友继续调侃道, “你发任你发,我用 Java 8” ,但根据今年 Azul 组织发布关于 Java 使用的最新数据显示,开发者们最关心的还是长期支持版(LTS)。Java 17 悄悄登上了使用率最高的宝座,Java 21 也紧随其后。至于刚刚登场的 Java 25,会不会像前辈一样逐步取代老版本、成为新的主力,还要看时间给出的答案了。
官方公告:https://www.oracle.com/news/announcement/oracle-releases-java-25-2025-09-16/
https://www.infoworld.com/article/3846172/jdk-25-the-new-features-in-java-25.html
本文来自微信公众号“CSDN”,编译:苏宓 ,36氪经授权发布。