写点什么

Java 26 发布,带来语言创新、类库优化、性能提升与安全性增强

  • 2026-03-24
    北京
  • 本文字数:2428 字

    阅读完需:约 8 分钟

Oracle 已发布第 26 版 Java 及虚拟机。作为继 JDK 25 之后的首个非 LTS 版本,其最终功能集包含 10 项 JEP,其中五项仍以预览或孵化器特性形式推进。该版本包含的 JEP 如下:

五个 JEP——包括让 final 关键字名副其实、为 HTTP 客户端 API 新增 HTTP/3 支持、延迟常量(第二次预览)、结构化并发(第六次预览)以及 Vector API(第十一次孵化器)——均聚焦于 Java 类库改进。其余 JEP 则侧重语言创新、性能提升与安全性增强。

该版本还基于 Project Leyden 框架新增了第四个 JEP:支持任意 GC 的提前对象缓存。

如下图所示,该图表源自 Oracle Java 平台组全球开发者项目高级总监 Sharat Chander博文,展示了自 JDK 8 以来各 Java 版本的 JEP 数量。

我们将详细探讨其中部分 JEP,并对有望纳入 JDK 27 的特性进行预测。

支持任意 GC 的提前对象缓存

JEP 516(支持任意 GC 的提前对象缓存)旨在增强在 JDK 24 中交付的 JEP 483(提前类加载与链接),以优化启动与预热时间,并使其能够适配任意垃圾收集器,包括低延迟的 ZGC。

延迟常量(第二次预览)

JEP 526(延迟常量(第二次预览))在进行了首轮预览(即 JEP 502(稳定值(预览)))之后,提议进行第二轮预览,并包含相应的改进。该特性曾被命名为稳定值与计算常量,现正式引入计算常量的概念,将其定义为最多初始化一次的不可变值容器。它既具备 final 字段的性能与安全性优势,又在初始化时机上提供了更大的灵活性。

该 JEP 的修订内容包括:将名称从“稳定值”改为“延迟常量”,新名称能更准确地体现其高阶用例的设计意图,同时增强了可发现性。

有关该 JEP 的更多详细信息,请参阅 InfoQ 的这篇新闻报道

Vector API(第十一次孵化器)

JEP 529(Vector API(第十一次孵化器))提议开启第十一轮孵化,相较于 JDK 25 未做重大实现改动。该功能此前已在 JDK 16 至 JDK 25 中完成十轮孵化。它引入了一套 API,用于“表达向量计算,这类计算在运行时可编译为受支持 CPU 架构上的最优向量指令,从而实现优于等效标量计算的性能”。Vector API 将继续处于孵化器阶段,直至 Project Valhalla 的必要功能推出预览版。届时,Vector API 团队将调整 Vector API 及其实现来使用这些功能,并将其从孵化器阶段提升至预览阶段。

移除 Applet API

JEP 504(移除 Applet API),在经历了 JDK 9 中交付的 JEP 289(弃用 Applet API)以及在 JDK 17 中交付的 JEP 398(将 Applet API 标记为待移除)之后,正式移除了这一早已被废弃的 API。随着浏览器不再支持 Applet,该 API 已彻底过时。

加密对象的 PEM 编码(第二次预览)

JEP 524(加密对象的 PEM 编码(第二次预览))在进行了首轮预览(即在 JDK 25 中交付的 JEP 470(加密对象的 PEM 编码(预览)))之后,提议进行第二轮预览,并包含相应的变更。该特性提供了一套 API,用于“将表示加密密钥、证书和证书吊销列表的对象编码为广泛使用的隐私增强邮件(PEM)传输格式,也可从该格式解码还原为对象”。该 JEP 将支持加密对象在 PEM 文本格式与 PKCS #8X.509 二进制格式之间相互转换。

该预览版的变更包括:将 PEMRecord 类重命名为 PEM;增强 PEMEncoderPEMDecoder 类,以支持 KeyPairPKCS8EncodedKeySpec 类的加密和解密。

JDK 27

JDK 27 计划于 2026 年 9 月正式发布(GA),目前仅有一项 JEP 已确定纳入。不过结合众多 JEP 候选提案与草案,尤其是已提交的草案版本,我们可以推测还有哪些 JEP 有望被纳入 JDK 27。

JEP 531(延迟常量(第三次预览))分别在 JDK 25、JDK 26 中进行了两轮预览之后,提议进行第三轮预览,并包含两项调整。具体变更为:从 LazyConstant 接口中移除 isInitialized()orElse() 方法,原因是这两个方法与该特性的设计目标不符;新增 ofLazy() 工厂方法,可为三种 Java 集合类型(List、Set 和 Map)创建稳定、预定义的元素。

JEP 527(TLS 1.3 的后量子混合密钥交换)已确定纳入 JDK 27。该 JEP 提议采用互联网工程任务组(IETF)正在起草的混合密钥交换规范,结合 JDK 24 中交付的 JEP 496(抗量子模块格密钥封装机制)来增强 RFC 8446 定义的传输层安全(TLS)协议版本 1.3 的实现。

JEP 401(值类和对象(预览))提议对 Java 语言进行增强以支持值对象。值对象的定义为:仅包含 final 字段、不具有身份标识,且仅通过自身各个字段的值来区分。

JEP 草案 8376991(加密对象的 PEM 编码)在经过 JDK 25 和 JDK 26 的两轮预览后,提议最终确定该特性,并包含相关的变更。具体改动包括:将 PEM API 从记录类型改为类类型;新增 CryptoException 类,用于捕获运行时加密处理过程中出现的异常;以及将 DEREncodable 接口重命名为 BinaryEncodable,以便更“准确地描述存储在 PEM 文本中的二进制数据”。

JEP 草案 8329758(使用 ZGC 实现更快的启动和预热)提议对 ZGC 进行增强,使其能更高效地根据应用需求分配内存。通过创建较小的初始堆来降低操作系统开销,从而缩短启动时间。

请注意,草案 JEP 可能随时发生变更。

JDK 27 预计于 2026 年 9 月正式发布(GA),具体日期即将由 Oracle Java 平台组首席架构师 Mark Reinhold 公布。该版本预计在 2026 年 6 月初进入特性冻结阶段。

有关 JDK 26 中发布的其他 JEP 以及其他草案 JEP 和候选 JEP 的更多详细信息,请参阅 InfoQ 的这篇更详细的新闻报道

JDK 26 现已可从 Oracle 下载,其他供应商的二进制文件预计将在未来几天内提供。

【声明:本文由 InfoQ 翻译,未经许可禁止转载。】

查看英文原文:https://www.infoq.com/news/2026/03/java26-released/