2024 年 11 月 4 日这一周 OpenJDK 生态系统的活动重点如下:五个 JEP 成功完成各自的评审流程,已确定在 JDK 24 中发布;五个新的 JEP 进入 Proposed to Target 状态,目标版本为 JDK 24,并在 2024 年 11 月 11 日这一周接受评审;另外,还有两个 JEP 草案已进入 Candidate 状态。
Targeted 状态的 JEP
JEP 493(不使用 JMOD 链接运行时镜像)已从 “Proposed to Target” 进入到“Targeted” 状态,目标版本为 JDK 24。这一 JEP 提议允许 工具在不使用 JDK 的 JMOD 文件的情况下创建自定义运行时镜像,从而将 JDK 大小减少约 25%。这个特性在构建 JDK 时需要显式启用。开发者现在可以从本地模块链接运行时镜像,不受模块位置的限制。
JEP 491(同步虚拟线程而不固定)已从 “Proposed to Target” 进入到 “Targeted” 状态,目标版本为 JDK 24。该 JEP 提议允许在同步方法和语句中阻塞的虚拟线程释放其占用的底层平台线程,以便其他虚拟线程能够使用这些线程,从而提高 Java 代码的可扩展性。其目的是解决“几乎所有虚拟线程都绑定在特定平台线程上的问题,这一限制严重影响了虚拟线程处理应用工作负载的能力。”
JEP 488(模式、instanceof 和 switch 中的原始类型(第二次预览),已从 “Proposed to Target” 进入到 “Targeted” 状态,目标版本为 JDK 24。该 JEP 来自 Amber Project,在经过第一次预览(JEP 455(模式、instanceof 和 switch 中的原始类型(预览))后,再次进行预览以获得更多反馈。该特性增强了模式匹配,允许在所有模式上下文中使用原始类型模式,并扩展了 instanceof 和 switch ,可以支持所有原始类型。更多细节可在 Aggelos Biboudis 的规范草案中找到。
JEP 486(永久禁用安全管理器)已从 “Proposed to Target” 进入到 “Targeted” 状态,目标版本为 JDK 24。该 JEP 提议永久禁用 SecurityManager 类,因其已在 JEP 411(弃用安全管理器)中被弃用(JDK 17 )。尽管开发者在弃用后仍可启用 SecurityManager,但该特性将在未来被彻底移除。
JEP 450(紧凑对象头(实验))已从 “Proposed to Target” 进入到 “Targeted” 状态,目标版本为 JDK 24。该 JEP 受 Lilliput Project 的启发,提议在 64 位架构上将 HotSpot JVM 中的对象头大小从 96 位至 128 位缩减到 64 位。由于该特性是实验性质的,因此默认情况下是禁用的,启用后可能会引发意外后果。
Proposed to Target 的 JEP
JEP 495(简化的源文件和实例主方法(第四次预览))已从 “Candidate” 进入到 “Proposed to Target” 状态,目标版本为 JDK 24。这一 JEP 提议在之前三轮预览之后进行第四次预览(除了再次更名外未做变更),前三轮预览分别为 JEP 477(隐式声明类和实例主方法(第三次预览))、JEP 463(隐式声明类和实例主方法(第二次预览))和 JEP 445(未命名类和实例主方法(预览))。该特性旨在“让学生可以在不需要理解为大型程序设计的语言特性的情况下编写第一个程序”。更多详情请参阅 Java 语言架构师 Brian Goetz 的博文 Paving the on-ramp。Java 社区成员 Gavin Bierman 已发布首份规范草案供社区评审。评审预计将在 2024 年 11 月 13 日结束。
JEP 494(模块导入声明(第二次预览))已从 “Candidate” 进入到 “Proposed to Target” 状态,目标版本为 JDK 24。这一 JEP 提议在第一次预览之后进行第二次预览,即 JEP 476(模块导入声明(预览))。这个特性将增强 Java 编程语言的能力,能够简洁地导入一个模块导出的所有包,目标是简化模块库的重用,无需将代码直接导入到模块本身。与第一次预览相比的变化包括:取消了模块不允许声明对 java.base 模块传递依赖的限制;更新 java.se 模块的声明,使其传递性地依赖 java.base 模块;允许按需声明的类型导入覆盖模块导入声明。这些变化意味着导入 java.se 模块将能够按需导入整个 Java SE API。预计评审将在 2024 年 11 月 13 日结束。
JEP 492(灵活的构造方法体(第三次预览))已从 “Candidate” 进入到 “Proposed to Target” 状态,目标版本为 JDK 24。该 JEP 提议进行第三轮预览,仅有少量变更,以便从前两轮的预览中获得更多反馈,具体包括:在 JDK 23 中发布的 JEP 482(灵活的构造方法体(第二次预览))和在 JDK 22 中发布的 JEP 447(super() 的前置语句(预览))。该特性允许在构造方法中调用 或 之前插入不引用正在被创建的对象实例的语句,同时保持现有构造方法安全性和初始化保证。该 JEP 的变更包括:处理局部类,并放宽“字段在显式构造方法调用之前不可访问”的限制,调整为“字段在显式构造方法调用之前不可读取”。Oracle 技术顾问 Gavin Bierman 已提供了初始规范,供 Java 社区评审和反馈。该审查预计将于 2024 年 11 月 14 日结束。
JEP 483(预加载和链接类)已从 “Candidate” 进入到 “Proposed to Target” 状态,目标版本为 JDK 24。该 JEP 提议在 HotSpot Java 虚拟机启动时立即提供应用程序所需的已加载和已链接类来“提高启动速度”。实现这一目标的方法是在应用程序运行期间监控类加载和链接,并将这些信息存储在缓存中,以便后续运行时使用。该特性将为未来改进启动和预热速度打好基础。评审预计将于 2024 年 11 月 14 日结束。
JEP 479(移除对 Windows 32 位 x86 架构的支持)已从 “Candidate” 进入到 “Proposed to Target” 状态,目标版本为 JDK 24。该 JEP 提议在 JEP 449(放弃支持 Windows 32 位 x86 架构)(JDK 21)之后,完全移除对 Windows 32 位 x86 架构的支持。其目标是:移除所有仅支持 Windows 32 位平台的代码路径;停止所有针对 Windows 32 位平台的测试和开发工作;并简化 OpenJDK 的构建和测试基础设施,与现代计算标准保持一致。评审预计将于 2024 年 11 月 12 日结束。
新的候选 JEP
JEP 497(基于模格的抗量子数字签名算法)已从 JEP Draft 8339010 进入到 “Candidate” 状态。该 JEP 提议“通过提供基于模格的抗量子数字签名算法(ML-DSA)实现”来增强 Java 应用程序的安全性。该算法已由 FIPS 204 标准化。这将通过实现 Java 的 KeyPairGenerator、Signature 和 KeyFactory 类来实现。
JEP 496(基于模格的抗量子密钥封装机制,已从 JEP Draft 8339009 进入到 “Candidate” 状态。该 JEP 提议“通过提供基于模格的抗量子密钥封装机制(ML-KEM)实现”来增强 Java 应用程序的安全性。该机制已由 FIPS 203 标准化。这将通过实现 Java 的 KeyPairGenerator、KEM 和 KeyFactory 类来实现。
JDK 24 特性集合及发布时间表
Oracle Java 平台首席架构师 Mark Reinhold 批准的 JDK 24 发布计划如下:
Rampdown Phase One(从主线分叉):2024 年 12 月 5 日
Rampdown Phase Two:2025 年 1 月 16 日
初始发布候选版本:2025 年 2 月 6 日
最终发布候选版本:2025 年 2 月 20 日
正式发布:2025 年 3 月 18 日
在距离 JDK 24 Rampdown Phase One(特性集将被冻结)还有一个多月的时间里,目前已纳入特性集的 JEP 共计 19 个(包括 Proposed to Target):
JEP 404: 分代 Shenandoah (实验)
JEP 450: 紧凑对象头 (实验)
JEP 472: 准备限制 JNI 的使用
JEP 475: G1 延迟屏障扩展
JEP 478: 密钥派生函数 API (预览)
JEP 479: 移除对 Windows 32 位 x86架构的支持
JEP 483: 预加载和链接类
JEP 484: 类文件 API
JEP 485: 流式收集器
JEP 486: 永久禁用安全管理器
JEP 487: 作用域值 (第四次预览)
JEP 489: 向量 API (第九次孵化)
JEP 490: ZGC: 移除非分代模式
JEP 491: 同步虚拟线程而不固定
JEP 492: 灵活的构造函数体 (第三次预览)
JEP 493: 不使用 JMOD 链接运行时镜像
JEP 494: 模块导入声明 (第二次预览)
JEP 495: 简单源文件和实例主方法 (第四次预览)
JDK 24 的新特性数量已经超过 JDK 16 和 JDK 11 中各自交付的 17 项特性。对于 JDK 24,开发者可以通过 Java Bug Database 报告错误。
原文链接:
https://www.infoq.com/news/2024/11/jdk-news-roundup-nov04-2024/
评论