写点什么

JDK 24 和 JDK 25:最新进展全知晓

作者:Michael Redlich

  • 2025-03-04
    北京
  • 本文字数:3927 字

    阅读完需:约 13 分钟

JDK 24 和 JDK 25:最新进展全知晓

JDK 24 是自 JDK 21 以来的第三个非长期支持版本。甲骨文公司 Java 平台组首席架构师 Mark Reinhold 宣布,JDK 24 已进入首个候选发布阶段。2024 年 12 月初,主线源代码仓库分支到 JDK 稳定版本仓库(Rampdown 第一阶段),这确定了 JDK 24 的功能集。对于关键漏洞,比如回归问题或严重的功能缺陷,可能会进行修复,但必须通过修复请求流程获得批准。按照发布计划,JDK 24 将于 2025 年 3 月 18 日正式发布 。以 JEP(Java 增强提案)形式呈现的最终 24 项新特性,可分为五大类:核心 Java 库、Java 语言规范、安全库、HotSpot 和 Java 工具。


核心 Java 库(7 项新特性):


  • JEP 472:为限制 JNI 的使用做准备;

  • JEP 484:类文件 API;

  • JEP 485:流收集器;

  • JEP 487:作用域值(第四次预览);

  • JEP 489:向量 API(第九次孵化);

  • JEP 498:使用 sun.misc.Unsafe 中的内存访问方法时发出警告;

  • JEP 499:结构化并发(第四次预览)。


Java 语言规范(4 项新特性):


  • JEP 488:模式、instanceof 和 switch 中的原始类型(第二次预览);

  • JEP 492:灵活的构造函数体(第三次预览);

  • JEP 494:模块导入声明(第二次预览);

  • JEP 495:简单源文件和实例主方法(第四次预览)。


安全库(4 项新特性):


  • JEP 478:密钥派生函数 API(预览);

  • JEP 486:永久禁用安全管理器;J

  • EP 496:基于模块格的抗量子密钥封装机制;

  • JEP 497:基于模块格的抗量子数字签名算法。


HotSpot(8 项新特性):


  • JEP 404:分代 Shenandoah(实验性);

  • JEP 450:紧凑对象头(实验性);

  • JEP 475:G1 的后期屏障扩展;

  • JEP 479:移除 Windows 32 位 x86 端口;

  • JEP 483:提前类加载和链接;

  • JEP 490:ZGC:移除非分代模式;

  • JEP 491:无需固定即可同步虚拟线程;

  • JEP 501:弃用 32 位 x86 端口以便后续移除。


Java 工具(1 项新特性):


  • JEP 493:不使用 JMODs 链接运行时镜像。


我们来审视其中一些新特性,并了解它们在主要 Java 项目(Amber、Loom、Panama、Valhalla 和 Leyden)中的归属。这些项目旨在孵化一系列组件,最终通过精心策划的合并纳入 JDK。

Amber 项目:


JEP 495:简单源文件和实例主方法(第四次预览),在经过前三轮预览后,此次发布第四次预览且内容无变化(仅第二次更改了名称)。此前三轮预览分别是:JDK 23 中的 JEP 477“隐式声明类和实例主方法(第三次预览)”;JDK 22 中的 JEP 463“隐式声明类和实例主方法(第二次预览)”;JDK 21 中的 JEP 445“匿名类和实例主方法(预览)”。该特性旨在“改进 Java 语言,让初学者编写第一个程序时,无需理解为大型程序设计的语言特性”。这一 JEP 提案推进了甲骨文公司 Java 语言架构师 Brian Goetz2022 年 9 月发表的博客文章《 Paving the on-ramp》。甲骨文公司技术人员咨询成员 Gavin Bierman 已发布规范文档初稿,供 Java 社区审核。更多关于 JEP 445 的详细信息,可查看[InfoQ 新闻报道](https://www.infoq.com/news/2025/02/java-24-so-far/)。

Loom 项目:


JEP 487:作用域值(第四次预览),原名为“扩展本地变量(孵化)”。经过一轮孵化和三轮预览后,此次推出第四次预览且有一处变动。此前的预览版本分别是:JDK 23 中的 JEP 481“作用域值(第三次预览)”;JDK 22 中的 JEP 464“作用域值(第二次预览)”;JDK 21 中的 JEP 446“作用域值(预览)”;JDK 20 中的 JEP 429“作用域值(孵化)”。该特性支持在线程内部和线程之间共享不可变数据,与线程局部变量相比更具优势,尤其在使用大量虚拟线程时。与上一版预览相比,唯一的变动是从`ScopedValue`类中移除了`callWhere()`和`runWhere()`方法,以使 API 更加流畅。通过`ScopedValue.Carrier`类中定义的`call()`和`run()`方法,可实现使用一个或多个绑定的作用域值的功能。

Panama 项目:


在完成评审后,JEP 489:向量 API(第九次孵化)根据前八轮孵化的反馈意见进行了改进。此前的孵化版本分别是:JDK 23 中的 JEP 469“向量 API(第八次孵化)”;JDK 22 中的 JEP 460“向量 API(第七次孵化)”;JDK 21 中的 JEP 448“向量 API(第六次孵化)”;JDK 20 中的 JEP 438“向量 API(第五次孵化)”;JDK 19 中的 JEP 426“向量 API(第四次孵化)”;JDK 18 中的 JEP 417“向量 API(第三次孵化)”;JDK 17 中的 JEP 414“向量 API(第二次孵化)”;JDK 16 中作为孵化模块发布的 JEP 338“向量 API(孵化)”。原本计划复用最初的孵化状态进行重新孵化,最终决定继续按顺序编号。向量 API 将持续处于孵化阶段,直到 Valhalla 项目 的必要特性作为预览特性推出。届时,向量 API 团队将对向量 API 及其实现进行调整以使用这些特性,并将向量 API 从孵化阶段推进到预览阶段。


Leyden 项目:


JEP 483 提前类加载和链接旨在“通过让应用程序的类在 HotSpot Java 虚拟机启动时,以加载和链接状态即时可用,从而缩短启动时间”。这可以通过在一次运行过程中监控应用程序,并将所有类的加载和链接形式存储在缓存中,以供后续运行使用来实现。该特性将为未来缩短启动时间和预热时间奠定基础。


安全库:


JEP 497 基于模块格的抗量子数字签名算法旨在“通过提供符合 FIPS 204 标准的基于模块格的抗量子数字签名算法(ML-DSA)实现,增强 Java 应用程序的安全性”。这将通过实现 Java 的`KeyPairGenerator`、`Signature`和`KeyFactory`类来达成。


HotSpot:


受 Lilliput 项目 启发,JEP 450 紧凑对象头(实验性)提议“在 64 位架构下,将 HotSpot JVM 中对象头的大小从 96 到 128 位缩减至 64 位”。由于该特性被视为实验性的,默认处于禁用状态,若开发者启用可能会导致意外后果。更多关于 JEP 450 的详细信息,可查看 InfoQ 新闻报道_(__https://www.infoq.com/news/2025/02/java-24-so-far/)_


JEP 404 分代 Shenandoah(实验性)提议提供一种实验性的分代模式,同时不影响非分代的 Shenandoah 垃圾回收器,目标是在未来的 JDK 版本中将分代模式设为默认选项。该 JEP 最初计划用于 JDK 21,但由于“评审过程中发现的风险,以及对如此大量代码贡献进行全面评审的时间不足”,最终从 JDK 21 的最终特性集中移除。当时,Shenandoah 团队决定将目标设定为未来的 JDK 版本,以“尽可能提供最佳的分代 Shenandoah”。#### JDK 25


JDK 25 计划于 2025 年 9 月发布正式版,目前尚无针对 JDK 25 的 JEP 提案。不过,基于一些 JEP 候选提案和草案,尤其是已提交的那些,我们可以推测哪些 JEP 有可能被纳入 JDK 25。甲骨文公司技术人员咨询成员 Gavin Bierman 在给 Java 社区的一封邮件中宣布,他计划在 2025 年 9 月 JDK 25 发布时,敲定 JEP 495“简单源文件和实例主方法(第四次预览)”中所谓的“入门匝道(on-ramp)”特性。截至目前,相关草案尚未创建,但预计很快会有变动。


JEP 502“稳定值(预览)”,原名为“计算常量(预览)”,引入了计算常量的概念,即最多初始化一次的不可变值持有者。它兼具`final`字段的性能和安全优势,同时在初始化时机上更具灵活性。


JEP 草案 8340343“结构化并发(第五次预览)”提议进行第五次预览,对 API 做出几处修改,以从前四轮预览中获取更多反馈。此前的预览版本分别是:即将在 JDK 24 正式版中发布的 JEP 499“结构化并发(第四次预览)”;JDK 23 中的 JEP 480“结构化并发(第三次预览)”;JDK 22 中的 JEP 462“结构化并发(第二次预览)”;JDK 21 中的 JEP 453“结构化并发(预览)”。该特性引入结构化并发,将“在不同线程中运行的相关任务组视为单个工作单元,从而简化错误处理和取消操作,提高可靠性并增强可观测性”,进而简化并发编程。其中一项 API 修改提议是,通过静态工厂方法而非公共构造函数来打开`StructuredTaskScope`接口。


JEP 草案 8326035“CDS 对象流”提议在 Z 垃圾回收器(ZGC)中为类数据共享(CDS)添加对象归档机制,并采用统一的 CDS 对象归档格式和加载器。该特性将把 GC 的实现细节和策略与 CDS 归档对象流机制分开。


JEP 草案 8300911“PEM API(预览)”引入了一种简单直观的 API,用于对隐私增强邮件(PEM)格式进行编码和解码,描述最多可更改一次的值持有者。PEM 格式将用于存储和发送加密密钥及证书。


JEP 草案 8291976“在 HttpClient 中支持 HTTP/3” 提议更新 JDK 11 中发布的 JEP 321“HTTP 客户端”,以支持 HTTP/3 协议。这将使应用程序和库能够与 HTTP/3 服务器交互,并通过最少的代码更改获得 HTTP/3 带来的优势。我们预计甲骨文公司很快就会确定针对 JDK 25 的 JEP。


作者介绍


Michael Redlich,在过去 25 年里,Michael Redlich 始终是 Java 社区的活跃成员。2001 年,他创立了花园州 Java 用户组(前身为 ACGNJ Java 用户组),这个用户组至今仍在持续运营。


从 2016 年开始,Mike(Michael 的昵称)担任 InfoQ 的 Java 社区新闻编辑。在此期间,他每月撰写新闻报道,进行技术内容创作,还参与技术评审工作,为社区贡献颇丰。他曾在诸多重要场合发表演讲,比如甲骨文 Code One 大会、企业新兴技术大会、Trenton 计算机节(TCF)、TCF IT 专业人员大会,以及众多 Java 用户组活动。


在技术规范制定领域,Mike 是 Jakarta NoSQL 和 Jakarta Data 规范的贡献者,积极推动相关技术的发展。同时,他还参与了 Jakarta EE 大使领导委员会,为该技术生态的发展出谋划策。2023 年 4 月,他荣获 Java Champion 称号,这无疑是对他在 Java 领域卓越贡献的高度认可。


Mike 在新泽西州克林顿市的埃克森美孚技术与工程公司工作了长达 33 年半之久,最近刚刚退休。在那里,他积累了丰富的科学实验室和网络应用程序定制化开发经验。此前,他还在 Ai-Logix 公司(现 AudioCodes)担任技术支持工程师,不仅为客户提供专业的技术支持,还负责开发电话应用程序。


原文链接:


https://www.infoq.com/news/2025/02/java-24-so-far/

2025-03-04 14:005855

评论 1 条评论

发布
用户头像
还在用JDK11, 现在已经到了JDK24了。
2025-03-05 10:00 · 广东
回复
没有更多了

拒绝卡顿,揭秘盒马鲜生 APP Android 短视频秒播优化方案

阿里巴巴终端技术

android App 短视频 移动开发 体验优化

Go WebSocket开发与测试实践【gorilla/websocket】

FunTester

Java websocket 接口测试 Go 语言 FunTester

如何运用Camtasia中的交互性?

淋雨

Camtasia

华为顶级安全专家分享出来这份‘典藏版’Linux开发实战笔记

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

通过 for 循环,比较 Python 与 Ruby 编程思想的差别

Python猫

Python

App 端自动化的最佳方案,完全解放双手!

星安果

Python 自动化 爬虫

分布式系统的架构演进过程(一)

卢卡多多

分布式, 11月日更

EMQ 出席 2021 ArchSummit,打造全连接时代的数据基础设施

EMQ映云科技

大数据 物联网 IoT 智能

Python代码阅读(第61篇):延迟调用函数

Felix

Python 编程 Code 阅读代码 Python初学者

线程如何实现保持同步

编程江湖

Java 多线程

终于把性能测试这事儿讲清楚了

博睿数据

GitHub霸榜月余的24万字Java面试手册,竟是阿里机密

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

海康摄像机RTSP地址格式(官方最新版)

音视频牛哥

WebRTC RTMP RTSP 播放器

在 JavaScript 中如何检查对象为空

编程江湖

JavaScript 大前端

贪心:柠檬水找零、跳跃游戏🍋

空城机

JavaScript 贪心算法 11月日更

看完源码记不住?掌握这套方法,Alibaba不会少你一个工位

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

【AI最前线】精准优质-资讯|分享|热议第41期

百度大脑

人工智能

钉钉小程序快照技术初窥

阿里巴巴终端技术

小程序 ios android 快照 体验优化

构建多云战略的注意事项

云计算

Python Qt GUI设计:QComboBox下拉列表框类(基础篇—14)

不脱发的程序猿

Python qt PyQt GUI设计 QComboBox下拉列表框类

提升研发效能的低代码思路

赫杰辉

研发效能 低代码平台 x-series

Spring中的Controller和Service是线程安全的吗?我有点懵

热爱java的分享家

Java spring 程序人生 编程语言 经验分享

一次搞懂SpringBoot核心原理:自动配置、事件驱动、Condition

热爱java的分享家

Java 程序人生 Spring Boot 编程语言 经验分享

Spark面试题大全

编程江湖

大数据 Spark面试题

如何判断一个需求是真的用户需求,还是伪需求呢?

石云升

产品思维 需求分析 11月日更

一个对标VSCode的IDE---Fleet

IT蜗壳-Tango

11月日更

Java 项目中使用 Resilience4j 框架实现客户端 API 调用的限速/节流机制

码语者

Java 限速 节流 Resilience4j RateLimit

如何实现在线播放mpeg-ts文件?

Changing Lin

11月日更

远程工作的这几年

程序员铮铮

程序员 代码人生 远程工作

快上车丨直播课“Hello ArkansasUI:初识Slider组件(eTS)”来啦

HarmonyOS开发者

HarmonyOS

Spring Bean生命周期你除了会背八股文面试,真的会用了吗?

热爱java的分享家

Java spring 程序人生 编程语言 经验分享

JDK 24 和 JDK 25:最新进展全知晓_编程语言_InfoQ精选文章