JDK 26 与 JDK 27:目前已知信息汇总
JDK 26 是自 JDK 25 以来的首个非 LTS(长期支持)版本,目前已进入第二个发布候选(RC2)阶段,这是由 Oracle Java 平台组首席架构师 Mark Reinhold 宣布的。主干源代码仓库已于 2025 年 12 月初(减量阶段一/Rampdown Phase One)分叉至 JDK 稳定化仓库,从而确定了 JDK 26 的功能集。关键错误(如回归或严重功能问题)可能会得到修复,但必须通过 Fix-Request 流程审批。根据发布计划,JDK 26 将于 2026 年 3 月 17 日正式发布。
最终确定的 10 个新功能以 JEP(JDK 增强提案)的形式呈现,可分为五(5)个类别:核心 Java 类库(Core Java Library)、HotSpot、Java 语言规范(Java Language Specification)、安全类库(Security Library)和 客户端类库(Client Library)。
这其中有五(5)个新功能归类于 核心 Java 类库:
- JEP 500:准备让 Final 真正意味着 Final (Prepare to Make Final Mean Final)
- JEP 517:HTTP 客户端 API 的 HTTP/3 支持 (HTTP/3 for the HTTP Client API)
- JEP 525:结构化并发(第六次预览) (Structured Concurrency (Sixth Preview))
- JEP 526:惰性常量(第二次预览) (Lazy Constants (Second Preview))
- JEP 529:向量 API(第十一次孵化) (Vector API (Eleventh Incubator))
有二(2)个新功能归类于 HotSpot:
- JEP 516:支持任意 GC 的提前对象缓存 (Ahead-of-Time Object Caching with Any GC)
- JEP 522:G1 GC:通过减少同步提高吞吐量 (G1 GC: Improve Throughput by Reducing Synchronization)
有一(1)个新功能归类于 Java 语言规范:
- JEP 530:模式、instanceof 和 switch 中的基本类型(第四次预览) (Primitive Types in Patterns, instanceof, and switch (Fourth Preview))
有一(1)个新功能归类于 安全类库:
- JEP 524:加密对象的 PEM 编码(第二次预览) (PEM Encodings of Cryptographic Objects (Second Preview))
最后,有一(1)个新功能归类于 客户端类库:
- JEP 504:移除 Applet API (Remove the Applet API)
我们将审视其中一些新功能,并介绍它们归属于哪些主要的 Java 项目——Amber、Loom、Panama、Valhalla 和 Leyden —— 这些项目旨在孵化一系列组件,最终通过策划合并纳入 JDK。
Project Amber
JEP 530,模式、instanceof 和 switch 中的基本类型(第四次预览),在经历了 JDK 23 到 JDK 25 的三轮预览后,提出了包含两项变更的第四次预览。这些变更包括:增强无条件精确性的定义;以及在 switch 构造中应用更严格的支配性检查。
Project Loom
JEP 525,结构化并发(第六次预览),在经历了 JDK 19 到 JDK 25 的五轮预览后,提出了第六次预览。该功能通过引入结构化并发的概念来简化并发编程,旨在“将运行在不同线程中的相关任务组视为一个工作单元,从而简化错误处理和取消操作,提高可靠性,并增强可观测性。” 唯一的重大变化是向 StructuredTaskScope.Joiner 接口添加了一个 onTimeout() 方法,允许该接口的实现在超时后返回结果。
Project Panama
JEP 529,向量 API(第十一次孵化),在经历了 JDK 16 到 JDK 25 的十轮孵化后,提出了第十一次孵化,自 JDK 25 以来没有重大的实现变更。该功能引入了一个 API,用于“表达向量计算,使其在运行时能够可靠地编译为支持的 CPU 架构上的最佳向量指令,从而实现优于等效标量计算的性能。” 向量 API 将继续孵化,直到 Project Valhalla 的必要功能作为预览功能可用。届时,Vector API 团队将调整 Vector API 及其实现以使用这些功能,并将 Vector API 从孵化状态升级为预览状态。
安全类库
JEP 524,加密对象的 PEM 编码(第二次预览),在 JDK 25 完成第一轮预览(即 JEP 470:加密对象的 PEM 编码(预览))之后,提出了包含变更的第二轮预览。变更包括:将 PEMRecord 类重命名为 PEM;以及增强 PEMEncoder 和 PEMDecoder 类,以支持 KeyPair 和 PKCS8EncodedKeySpec 类的加密和解密。
HotSpot
JEP 522,G1 GC:通过减少同步提高吞吐量,旨在减少 G1 垃圾回收器的开销,以改善应用程序线程与 GC 线程之间的同步。
JEP 516,支持任意 GC 的提前对象缓存,旨在增强 JDK 24 中交付的 JEP 483 提前类加载和链接,以改善启动和预热时间,使其能够与任何垃圾回收器配合使用,包括低延迟的 Z 垃圾回收器(ZGC)。
JDK 27
计划于 2026 年 9 月发布 GA 版本,目前仅有一(1)个 JEP 被定位于 JDK 27。然而,基于许多 JEP 候选和草案,特别是那些已提交或增量预览的 JEP,我们可以推测哪些 JEP 有潜力被包含在 JDK 27 中。
JEP 527,TLS 1.3 的后量子混合密钥交换,已被定位于 JDK 27。该 JEP 提议通过使用互联网工程任务组(IETF)目前正在起草的 TLS 1.3 中的混合密钥交换规范,来增强 RFC 8446 传输层安全(TLS)协议版本 1.3 的实现,并结合 JDK 24 中交付的 JEP 496 抗量子模格密钥封装机制。
JEP 401,值类和对象(预览),在 Project Valhalla 的指导下,提议用值对象(value objects)增强语言,值对象定义为:仅包含 final 字段;没有标识;并且仅由其各自字段的值区分。
JEP 草案 8376595,惰性常量(第三次预览),在即将发布的 JDK 26 和 JDK 25 的两轮预览之后,提出了包含两项变更的第三次预览。这些变更包括:从 LazyConstant 接口中移除 isInitialized() 和 orElse() 方法,因为它们不符合该功能的设计目标;以及一个新的工厂方法 ofLazy(),可以为所有三种 Java 集合类型(即 List、Set 和 Map)创建稳定的、预定义的元素。
JEP 草案 8329758,使用 ZGC 实现更快的启动和预热,提议增强 Z 垃圾回收器,使其能够根据应用程序的需求更高效地分配内存。可以通过仅创建一个较小的初始堆来最小化启动时间,从而减少操作系统的开销。
请注意,JEP 草案随时可能发生变化。 我们预计 Oracle 很快会开始为 JDK 27 定位更多的 JEP。
关于作者
Michael Redlich
显示更多显示更少