速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

JDK 23 和 JDK 24 最新动态

Michael Redlich

  • 2024-09-15
    北京
  • 本文字数:4838 字

    阅读完需:约 16 分钟

JDK 23 和 JDK 24 最新动态

JDK 23 是继 JDK 21 之后的第二个非长期支持(LTS)版本,正如甲骨文 Java 平台组首席架构师 Mark Reinhold 所 宣称 的那样,它已进入了第二个候选版本阶段。主线源代码库于 2024 年 6 月初(Rampdown 第一阶段)分支到 JDK 稳定代码库,并定义了 JDK 23 的特性集。严重缺陷,如回归或严重的功能问题,可能会得到修复,但必须通过修复请求(Fix-Request)流程获得批准。根据发布时间表,JDK 23 将于 2024 年 9 月 17 日正式发布。


最终将有 12 个新特性以 JEP 的形式发布,它们可被分为四 (4) 类:核心 Java 库Java 语言规范HotSpotJava 工具


这些新特性中,有六(6)个可归类为 核心 Java 库


JEP 466:类文件 API(Class-File API,第二次预览)


JEP 469:向量 API(Vector API,第八轮孵化)


JEP 471:弃用 sun.misc.Unsafe 中的内存访问方法以进行删除(Deprecate the Memory-Access Methods in sun.misc.Unsafe for Removal)


JEP 473:流收集器(Stream Gatherers,第二次预览)


JEP 480:结构化并发(Structured Concurrency ,第三次预览)


JEP 481:作用域值(Scoped Values,第三次预览)


这些新特性中,有四(4)个可归类为 Java 语言规范


JEP 455:模式、instanceof 和 switch 中的原始类型(Primitive Types in Patterns, instanceof, and switch,预览版)


JEP 476:模块导入声明(Module Import Declarations,预览版)


JEP 477:隐式声明的类和实例主方法(Implicitly Declared Classes and Instance Main Methods,第三次预览)


JEP 482:灵活的构造函数体(Flexible Constructor Bodies,第二次预览)


  • 这些新特性中,有一(1)个可归类为 HotSpot:


JEP 474:ZGC:默认采用分代模式(ZGC: Generational Mode by Default)


最后,这些新特性中,有一(1)个可归类为 Java 工具


JEP 467: Markdown 文档注释(Markdown Documentation Comments)


我们研究了其中的一些新特性以及支持它们的四个主要 Java 项目(Amber、Loom、Panama 和 Valhalla),这些项目旨在孵化一系列组件,然后通过精心策划的合并纳入到 JDK 中。

Amber 项目

JEP 482,灵活的构造函数体(Flexible Constructor Bodies,第二次预览),提议进行第二轮预览和名称更改,以获取上一轮预览的反馈,即 JEP 447,super(…) 前导语句(Statements before super(…),预览版),其在 JDK 22 中交付。该特性允许未引用正在创建的实例的语句出现在构造函数中的 this() 或 super() 调用之前;并为构造函数保留现有的安全和初始化保证。该 JEP 的更改包括:对局部类的处理;以及放宽了在显式构造函数调用之前不能访问字段的限制,将限制要求改为在显式构造函数调用之前不能读取字段。甲骨文技术人员顾问 Gavin Bierman 提供了该 JEP 的 初始规范,以供 Java 社区审查并提供反馈。


JEP 477,隐式声明的类和实例主方法(Implicitly Declared Classes and Instance Main Methods,第三次预览),以前称为未命名的类和实例主方法(Unnamed Classes and Instance Main Methods, 预览版)、灵活的主方法和匿名主类(Flexible Main Methods and Anonymous Main Classes,预览版)以及隐式类和增强的主方法(Implicit Classes and Enhanced Main Methods,预览版)。该 JEP 结合前两轮 预览 的反馈,加入了增强功能。前两次预览分别为:JEP 463,隐式类和实例主方法(Implicit Classes and Instance Main Methods,第二次预览),将在即将发布的 JDK 22 中交付;JEP 445,未命名的类和实例主方法(Unnamed Classes and Instance Main Methods ,预览版),在 JDK 21 中交付。该 JEP 提议“演进 Java 语言,以便学生无需理解为大型程序所设计的语言功能即可编写他们的首个程序。”该 JEP 推进了甲骨文 Java 语言架构师 Brian Goetz 于 2022 年 9 月发布的博客文章《铺路》(Paving the on-ramp)。甲骨文技术人员顾问 Gavin Bierman 编写的 最新规范 文档草案已开放给 Java 社区审查。有关 JEP 445 的更多详细信息,请参阅 InfoQ 的 这篇新闻报道。


JEP 476,模块导入声明(Module Import Declarations,预览版),提议增强 Java 编程语言,使其能够简洁地导入模块所暴露出来的所有包,其目的是简化模块库的重用,而无需导入模块本身的代码。


JEP 455,模式、instanceof 和 switch 中的原始类型(Primitive Types in Patterns, instanceof, and switch,预览版),提议通过允许在所有模式上下文中使用原始类型模式来增强模式匹配,并扩展 instanceofswitch 以允许其使用原始类型。甲骨文核心技术成员 Aggelos Biboudis 最近发布了该特性的 最新规范草案。

Loom 项目

JEP 481,作用域值(Scoped Values,第三次预览),以前称为范围局部变量(Extent-Local Variables , 孵化器),提供了第三次预览,该版本只包含一个更改,旨在从之前的一轮孵化和两次预览中获得额外的经验和反馈,即:JEP 464,作用域值(Scoped Values,第二次预览),在 JDK 22 中交付;JEP 446,作用域值(Scoped Values,预览版),在 JDK 21 中交付;以及 JEP 429,作用域值(Scoped Values ,孵化器),在 JDK 20 中交付。该特性允许在线程内和线程之间共享不可变数据。这比线程局部变量更可取,特别是在使用大量虚拟线程时。该特性的更改与在 ScopedValue 类中定义的 callWhere() 方法的操作参数有关,现在它是一个函数接口,允许 Java 编译器推断是否可能抛出已检查的异常。通过此更改,就不再需要 getWhere() 方法了,并且也已经将其删除了。


JEP 480,结构化并发(Structured Concurrency ,第三次预览),提供了第三次未做更改的预览,以便从之前两轮预览中获得更多的反馈,即:JEP 462,结构化并发(Structured Concurrency ,第二次预览),在 JDK 22 中交付;以及 JEP 453,结构化并发(Structured Concurrency,预览版),在 JDK 21 中交付。该特性通过引入结构化并发来简化并发编程,“将在不同线程中运行的相关任务组视为单个工作单元,从而简化错误处理和撤销,提高可靠性,并增强可观测性。”

Panama 项目

JEP 469,向量 API(Vector API,第八轮孵化),根据前七轮孵化的反馈进行了增强:JEP 460,向量 API(第七轮孵化),在 JDK 22 中交付;JEP 448,向量 API(Vector API ,第六轮孵化),在 JDK 21 中交付;JEP 438,向量 API(Vector API ,第五轮孵化),在 JDK 20 中交付;JEP 426,向量 API(Vector API ,第四轮孵化),在 JDK 19 中交付;JEP 417,向量 API(Vector API ,第三轮孵化),在 JDK 18 中交付;JEP 414,向量 API(Vector API,第二轮孵化),在 JDK 17 中交付;以及 JEP 338,向量 API(Vector API ,轮孵化器),在 JDK16 中作为 孵化器模块 提供。最初计划通过重复使用原始的 Incubator 状态进行重新孵化,但最终决定继续枚举。向量 API 将继续孵化,直到 Valhalla 项目的必要功能可作为预览功能提供时为止。届时,向量 API 团队将对向量 API 及其实现进行调整以便使用它们,并将向量 API 从 Incubator 状态提升到 Preview 状态。

字符串模板的更新

JEP 465,字符串模板(String Templates,第三次预览),经历了在 JDK 21 和 JDK 22 中的两个预览版本之后,由于一系列无法预见的问题而被关闭并撤回。该特性旨在通过字符串模板(包含嵌入式表达式的字符串文字)来增强 Java 编程语言,这些字符串模板在运行时对嵌入式表达式进行评估和验证。有关撤回该 JEP 的原因的更多详细信息,请参阅甲骨文 Java 开发倡导者 Nicolai Parlog 的这篇博客文章以及甲骨文 Java 语言架构师 Brian Goetz 的这封电子邮件。

JDK 24

计划于 2025 年 3 月发布 GA 版本,目前只有一个针对 JDK 24 的 JEP。然而,根据一些 JEP 候选和草案,特别是那些已经提交的,我们可以推测出哪些额外的 JEP 有可能被包含在 JDK 24 中。


JEP 472,准备限制对 JNI 的使用(Prepare to Restrict the Use of JNI),已经被定为 JDK 24 的目标。该 JEP 提议限制与 JDK 22 中所提供的外部函数和内存(Foreign Function & Memory,FFM)API 中的受限方法一起使用的本质上不安全的 Java 本机接口(Java Native Interface,JNI)。从即将发布的 JDK 23 开始,如果 FFM 用户未在命令行上启用不安全的本机访问,对齐策略将使 Java 运行时显示有关使用 JNI 的警告。预计在 JDK 23 之后的版本中,使用 JNI 将抛出异常而不是警告。更多详细信息可参阅 InfoQ 的这篇新闻报道。


JEP 404,分代 Shenandoah( Generational Shenandoah,实验性),尽管目前还处于 Candidate 状态,但最近已更新并被包含在了 JDK 24 中。我们预计该 JEP 将很快被提升为 Proposed to Target 状态。JEP 404 最初的目标是 JDK 21,但由于“在审查过程中发现了风险并且缺乏足够的时间来对如此大量的代码贡献进行执行彻底的审查”,JEP 404 被正式从最终功能集中 移除。Shenandoah 团队决定“尽其所能创造出最好的分代 Shenandoah”,并将目标锁定在未来版本中。


JEP 401,值类和对象(Value Classes and Objects,预览版),以前称为空限制值对象存储(Null-Restricted Value Object Storage,预览版)


和基元类(Primitive Classes,预览版),在 Valhalla 项目的赞助下,引入了开发人员声明的基元类——由 Value Objects API 定义的特殊类型的值类,用于定义新的基元类型。


JEP 草案 8334712,类文件 API(Class-File API),提议在经过两轮预览后,在 JDK 24 中完成该特性:JEP 466,类文件 API(Class-File API,第二次预览),将在即将发布的 JDK 23 中交付;以及 JEP 457,类文件 API(Class-File API,预览版),在 JDK 22 中交付。该特性提供了一个用于解析、生成和转换 Java 类文件的 API。它最初将作为 JDK 中 ASM(Java 字节码操作和分析框架)的内部替代品,并计划将其作为公共 API 开放。Goetz 将 ASM 描述为“一个带有大量遗留包袱的旧代码库”,并提供了有关该特性将如何发展并最终取代 ASM 的背景信息。


JEP 草案 8326035,CDS 对象流(CDS Object Streaming),提议在 Z 垃圾收集器(ZGC)中添加一个用于类数据共享(CDS)的对象归档机制,该机制具有统一的 CDS 对象归档格式和加载器。该特性将使 GC 实现细节和策略与 CDS 存档对象流机制分开。


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


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


JEP 草案 8312611,稳定值(Stable Values,预览版),以前称为计算常数(Computed Constants,预览版),引入了计算常数的概念,定义为最多初始化一次的不可变值持有者。这提供了 final 字段的性能和安全优势,同时在初始化时间方面提供了更大的灵活性。


我们预计 Oracle 将很快开始针对 JDK 24 提供更多的额外 JEP。

作者介绍

Michael Redlich 在过去的 25 年里一直是 Java 社区的活跃成员。他于 2001 年创立了 Garden State Java 用户组(其前身为 ACGNJ Java 用户组),该组目前仍在持续运营。自 2016 年以来,Mike 一直担任 InfoQ 的 Java 社区新闻编辑,他的贡献包括每月新闻报道、技术写作和技术评论。他曾在 Oracle Code One、企业新兴技术、特伦顿计算机节(TCF)、TCF IT 专业会议和众多 Java 用户组等场合发表演讲。Mike 是 Jakarta NoSQL 和 Jakarta Data 规范的提交者,并参加了 Jakarta EE 大使的领导委员会。他于 2023 年 4 月被任命为 Java 冠军。凭借 33 年半的服务经验,Mike 最近从新泽西州克林顿的埃克森美孚技术与工程公司退休,并且他拥有开发定制科学实验室和网络应用程序的经验。他还曾在 Ai-Logix, Inc.(现为 AudioCodes)担任技术支持工程师,为客户提供技术支持并开发电话应用程序。

2024-09-15 10:0011471

评论 2 条评论

发布
用户头像
"请参阅甲骨文 Java 开发倡导者 Nicolai Parlog 的这篇博客文章以及甲骨文 Java 语言架构师 Brian Goetz 的这封电子邮件。" 求原链接出去
2024-09-18 16:32 · 广东
回复
用户头像
原文里的链接呢
2024-09-15 11:19 · 上海
回复
没有更多了
发现更多内容

基于亚马逊云科技新功能:Amazon SageMaker Canvas 无代码机器学习—以构建货物的交付状态检测模型实战为例深度剖析以突显其特性

亚马逊云科技 (Amazon Web Services)

为什么苹果用户都在使用Dynamic Wallpaper动态壁纸软件?

Rose

动态壁纸 Dynamic Wallpaper下载 苹果壁纸下载 Dynamic Wallpaper中文版 壁纸app

office 2016专业增强版 含office2016激活工具 mac/win

Rose

office办公软件 Office 2016 下载 office2016破解版 Msoffce2016

【论文速读】| 大语言模型引导的协议模糊测试

云起无垠

非常专业的3D样机宣传视频制作工具Rotato for mac

Rose

Mac 3D样机 Rotato下载 样机宣传 软件下载

微信小程序能代替原生App么?

天津汇柏科技有限公司

小程序 App

PopChar 10 mac直装版 特殊字符表情一键快速输入

Rose

特殊字符 Mac软件 PopChar 10新功能 PopChar 10下载 表情包

macOS Sonoma 14.4 (23E214) 正式版发布,ISO、IPSW、PKG 下载

sysin

macos macOS Sonoma

Nova for Mac:强大代码编辑器的极致体验

Rose

mac软件下载 Nova代码编辑 Nova Mac破解

敢闯技术无人区,TCL实业即将亮相AWE 2024

Geek_2d6073

Axure RP 10中文授权码及安装教程, 从交互设计到响应式原型

Rose

原型设计 软件下载 Axure RP 授权码 Axure RP 汉化包

104 Connection reset by peer

麦兜

智能部署之巅:Amazon SageMaker 引领机器学习革新

亚马逊云科技 (Amazon Web Services)

App Cleaner & Uninstaller:Mac软件卸载神器,彻底清理无残留

Rose

mac系统清理优化软件 App Cleaner Mac卸载软件 苹果电脑软件下载

Soulver 3 for Mac:让数字处理变得简单直观的智能计算器

Rose

计算器 智能计算 Mac软件 Soulver 3

英伟达要小心了!爆火的Groq芯片能翻盘吗?AI推理速度「吊打」英伟达?

GPU算力

鸿蒙ArkUi中List样式

贺公子之数据科学与艺术

阿里巴巴中国站1688商品详情API:获取数据的关键步骤与技巧

技术冰糖葫芦

API 接口

DxO PhotoLab 7:影像之美,源于细节之魅,专业摄影后期处理的首选

Rose

摄影 图片编辑 摄影后期处理软件

无需魔法,快速体验 Claude 3 ,GPT 4 在他面前就是弟弟

朱亚光

JDK 23 和 JDK 24 最新动态_编程语言_InfoQ精选文章