10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

JDK 25 和 JDK 26 的最新进展

  • 2025-09-01
    北京
  • 本文字数:2827 字

    阅读完需:约 9 分钟

大小:1.47M时长:08:35
JDK 25和JDK 26的最新进展

JDK 25JDK 21之后的下一个长期支持(LTS)版本,目前它已经发布了第二个候选版本,正如甲骨文公司 Java 平台组首席架构师Mark Reinhold宣布的那样。主线源代码仓库在 2025 年 6 月初被 fork 到 JDK稳定化代码仓库(Rampdown Phase One),该行为确定了 JDK 25 的特性集。关键缺陷,如回归或严重的功能问题,可能会得到解决,但必须要通过修复请求流程获得批准。根据发布计划,JDK 25 将在 2025 年 9 月 16 日正式发布。

 

最终的 18 个新特性,以 JEP 的形式,可以分为四个类别,即核心 Java 库(Core Java Library)Java 语言规范(Java Language Specification)安全库(Security Library)HotSpot

 

四个新特性被归类为核心 Java 库

 

四个新特性被归类为 Java 语言规范

 

两个新特性被归类为安全库

 

最后,还有八个新特性被归类为 HotSpot

 

我们了解了其中的一些新特性,以及包含它们的 Java 主项目,即AmberLoomPanamaValhallaLeyden,这些项目旨在孵化一系列组件,最终经过仔细审查后合并到 JDK 中。

 

Amber 项目

JEP 512,紧凑源文件和实例主方法,提议经过 JDK 21 至 JDK 24 的四轮预览后,对这一功能实现最终确定,并进行改进。这个功能以前被称为简单源文件和实例主方法(Simple Source Files and Instance Main Methods),旨在“发展 Java 语言,以便学生可以在不需要理解为大型程序所设计的语言特性的情况下编写他们的第一程序。”这个 JEP 推进了 2022 年 9 月甲骨文 Java 语言架构师Brian Goetz的博客文章,Paving the on-ramp,甲骨文技术咨询团队成员Gavin Bierman已经发布了这个规范文档供 Java 社区审查。

 

Loom 项目

JEP 506,作用域值(Scoped Values),提议经过 JDK 20 至 JDK 24 的一轮孵化和四轮预览后,对这一功能实现最终确定,不作任何更改。这个功能以前被称为范围局部变量(Extent-Local Variables,孵化),它允许在线程内和跨线程共享不可变的数据。这比线程局部变量更受青睐,特别是在使用大量虚拟线程的时候。

 

Panama 项目

JEP 508,向量API(第十轮孵化),提议在经过 JDK 16 至 JDK 24 的九轮孵化后,进行第十次孵化,自 JDK 24 以来它没有 API 变化和实质性的实现变化。这个功能引入了一个 API 来“表达向量计算,这些计算在运行时可靠地编译为支持的 CPU 架构上的最优向量指令,从而实现比等效标量计算更优越的性能。”Vector API 将继续孵化,直到项目Valhalla的必要功能作为预览功能可用。届时,Vector API 团队将调整 Vector API 及其实现以使用它们,并将 Vector API 从孵化阶段提升到预览阶段。

 

Leyden 项目

JEP 515,提前编译方法分析,提议通过“在 HotSpot JVM 启动时立即使用应用程序之前运行时收集的方法执行分析结果”,以此改善应用程序的预热时间。这使得 JIT 编译器能够在应用程序启动时立即生成本地代码,无需等待收集分析结果。

 

JEP 514,提前编译命令行人体工程学,提议简化创建提前编译缓存的过程,正如 JEP 483,提前编译类加载和链接中所述,这可能通过“简化常见用例所需的命令”来加速 Java 应用程序的启动。

安全库

JEP 510,密钥派生函数API,提议在经过一轮预览后最终确定该特性,它没有发生变更。这一轮预览是在 JDK 24 中交付的 JEP 478,密钥派生函数 API(预览)。该特性引入了一个用于密钥派生函数(Key Derivation Functions,KDF)的 API。KDF 是一种从密钥和其他数据派生额外密钥的加密算法,目标包括:允许安全提供者在 Java 或本地代码中实现 KDF 算法,并在 JEP 452,密钥封装机制(Key Encapsulation Mechanism)的实现中使用 KDF。

HotSpot

JEP 519,紧凑对象头,提议将这个特性从实验阶段提升到产品阶段。受项目Lilliput的启发,这个特性“将 HotSpot JVM 中对象头的大小从 64 位架构上的 96 到 128 位减少到 64 位。”可以在这篇 InfoQ新闻中找到更多关于 JEP 519 的细节。

JDK 26

JDK 26计划在 2026 年 3 月发布 GA 版本,目前针对 JDK 26 仅有一个 JEP。然而,鉴于已有许多 JEP 候选和草案,特别是那些已经提交或增量预览的,我们可以推测哪些 JEP 有可能被包含在 JDK 26 中。

 

JEP 504,移除Applet API(Remove the Applet API),已确定在 JDK 26 实现。这个 JEP 提议移除在 JDK 17 中已被弃用的 Applet API,因为 Applet 不再被网络浏览器支持,早已过时。

 

JEP 517,HTTP客户端API的HTTP/3(HTTP/3 for the HTTP Client API),提议更新 JDK 11 中交付的 JEP 321,HTTP Client,以支持 HTTP/3 协议。这将允许应用程序和库与 HTTP/3 服务器交互,并在代码更改最小的情况下获得 HTTP/3 的好处。

 

JEP 草案 8359894稳定值(第二次预览),提议在第一轮预览(即 JEP 502,稳定值(预览))之后进行第二次预览。它以前称为计算常量(Computed Constants,预览),这个特性引入了计算常量的概念,定义为最多初始化一次的不可变值持有者。这提供了final字段的性能和安全收益,同时在初始化时机上提供了更大的灵活性。

 

JEP 草案 8360563PEM编码的对象加密(第二轮预览),提议在第一轮预览(即 JEP 470:PEM编码的对象加密(预览))之后进行第二次预览,以接受更多的反馈和经验。这个特性提供了“一个 API,用于将代表加密密钥、证书和证书吊销列表的对象编码到广泛使用的隐私增强邮件(Privacy-Enhanced Mail,PEM)传输格式中,并从该格式解码回对象。”这个 JEP 将支持 PEM 文本和PKCS #8X.509二进制格式的加密对象之间的转换。

 

JEP 草案 8349536让fianl名副其实(Prepare to Make Final Mean Final),将使 Java 生态系统做好必要的准备,不允许使用深度反射(通常使用AccessibleObject类中定义的setAccessible()方法)改变声明为final的字段。

 

请注意,草案 JEP 可能随时更改。我们预计甲骨文公司将很快开始确定面向 JDK 26 的 JEP。

 

原文链接:

JDK 25 and JDK 26: What We Know So Far

2025-09-01 14:301

评论

发布
暂无评论
JDK 25和JDK 26的最新进展_编程语言_Michael Redlich_InfoQ精选文章