Oracle发布JDK 22:12项新特性详解及对Visual Studio Code支持的改进

作者 |迈克尔·雷德利希

Oracle发布JDK 22:12项新特性详解及对Visual Studio Code支持的改进

译者|张伟斌

规划|蒂娜

今天,Oracle 发布了 JDK 22,包含 12 个新特性,可分为四类,分别是核心 Java 库、Java 语言规范、HotSpot 和 Java 工具。该公司还热衷于吸引新开发人员的注意力,部分方法是改进对 Visual Studio Code (VS Code) 的支持。

JDK 22 是一个功能版本,这意味着 Oracle 将支持它 6 个月,直到发布下一个功能版本。 LTS 版本(例如 JDK 21)的支持期限长达 8 年。下一个 LTS 版本将是 Java 25,计划于 2025 年 9 月发布。

Oracle 声称 Java 是“当今技术趋势的第一语言”并且是“企业/IT 组织使用的第一语言”。据 Oracle 称,目前有 630 亿个活跃 Java 虚拟机 (JVM) 和 410 亿个基于云的 JVM 正在使用中。

在这些新功能中,有 6 个新功能被分组在核心 Java 库下:

Java 语言规范分为四个新功能:

最后,Java 工具下有一个新功能:

琥珀项目

JEP 463,隐式声明的类和实例主方法(第二次预览),以前称为未命名类和实例主方法(预览)、灵活的主方法、灵活的主方法和匿名主类(预览)以及隐式类和增强的主方法(预览) ),JEP 包含基于上一轮预览反馈的增强功能、JEP 445、未命名类和实例主方法 (预览)。该 JEP 建议“发展 Java 语言,以便学生可以编写他们的第一个程序,而无需了解为大型程序设计的语言功能。”此 JEP 是 Oracle 的 Java 语言架构师 Brian Goetz 于 2022 年 9 月发布的博文《铺平入口》的延续。Oracle 的技术顾问 Gavin Bierman 发布了规范文档的初稿,供 Java 社区审核。有关 JEP 445 的更多详细信息可以在 InfoQ 的新闻报道中找到。

JEP 459,字符串模板(第二个预览版)提供了第一个预览版 JEP 430,随 JDK 21 提供的字符串模板(预览版)的另一个预览。此功能通过字符串模板增强了 Java 编程语言,字符串模板是包含嵌入表达式的字符串常量,可以在运行时解释。嵌入的表达式在运行时进行评估和验证。关于 JEP 430 的更多细节可以在 InfoQ 的新闻报道中找到。

JEP 456,未命名变量和模式,建议在 JDK 21 提供的最后一轮预览 JEP 443,未命名模式和变量(预览版)之后最终确定此功能。此功能建议“使用未命名模块增强语言,这些模块与记录的内容相匹配”未指定组件名称和类型的组件,以及未命名的变量,这些变量可以初始化但不能使用。”两者都用下划线字符表示,例如r instanceof _(int x, int y)和r instanceof _。

JEP 447,super(...) 之前的语句(预览),此 JEP 建议允许构造函数中不引用正在创建的实例的语句出现在 this() 或 super() 调用之前,并保留现有的安全性和初始化保证。 Bierman 提供了此功能的初始规范,以供 Java 社区审核和反馈。

织机项目

JEP 464,Scoped Values(第二次预览),以前称为 Extent-Local Variables(Incubation),这个 JEP 建议在 JDK 22 中进行第二次预览,不进行任何更改,为了从上一轮预览中获得额外的经验和反馈,JEP 446 由 JDK 21 交付的范围值(预览)和 JDK 20 交付的范围值(孵化)。此功能允许在线程内和线程之间共享不可变数据。这种方法比线程局部变量更好,特别是在使用大量虚拟线程时。

JEP 462,结构化并发(第二次预览版),本次 JEP 将提出第二轮预览版,不进行任何更改,以便从上一轮预览中获得更多反馈,这就是 JDK 21 交付的 JEP 453,结构化并发(预览版)。此功能通过引入结构化并发来简化并发编程,结构化并发“将在不同线程中运行的相关任务组视为单个工作单元,从而简化错误处理和取消、提高可靠性并增强可观察性。”

巴拿马项目

JEP 460,Vector API(第七轮孵化),融合了前六轮孵化反馈的改进,即 JDK 21 提供的 JEP 448,Vector API(第六轮孵化),JEP 438,Vector API(第六轮孵化)孵化)由 JDK 20 提供(第五轮孵化),JEP 426 由 JDK 19 提供,Vector API(第四轮孵化),JEP 由 JDK 19 提供JDK 18 417,Vector API(第三轮孵化),JEP 414,Vector API(第二轮孵化)在 JDK 17 中提供,JEP 338,Vector API(孵化),在 JDK 16 中作为孵化器模块提供。 JEP 448 中的重要变化包括增强 JVM 编译器接口 (JVMCI) 以支持 Vector API 值。

JEP 454,Foreign Function & Memory API,建议该功能经过两轮孵化和三轮预览后最终确定,即JEP 412,Foreign Function & Memory API在JDK 17 Memory API中交付,孵化器) ,JEP 419 在 JDK 18 中交付,外部函数和内存 API(第二轮孵化),JDK 19 JEP 424,外部函数和内存 API(预览版),在JDK 20、JEP 434、外部函数和内存 API(第二个预览版),在 JDK 20 中交付,JDK 21 交付了 JEP 442、外部函数和内存 API(第三个预览版)。自上一版本以来的改进包括: 新的 Enable-Native-Access 清单属性,允许可执行 JAR 包中的代码在不使用 --enable-native-access 标志的情况下调用受限方法;允许客户端以编程方式构建 C 函数描述符的新方法,避免使用特定于平台的常量;改进了对本地内存中可变长度数组的支持;支持多字符集本地字符串。有关 JEP 454 的更多详细信息,请参阅 InfoQ 的新闻报道。

JDK 23

JDK 23计划于2024年9月正式发布,目前目标中仅包含一个JEP。然而,根据一些候选和草案 JEP,尤其是那些已经提交的 JEP,我们可以推测 JDK 23 中可能包含哪些其他 JEP。

JEP 455,模式中的原始类型、instanceof 和 switch(预览版)已成为 JDK 23 中的目标。该 JEP 位于 Amber 项目下,建议通过允许在所有模式上下文中使用原始类型并扩展 instanceof 来增强模式匹配并切换为允许使用原始类型。 Oracle核心技术人员Aggelos Biboudis最近发布了该功能的最新规范草案。

JEP 468(派生记录创建)(预览版)已从 JDK 草案 8321133 提升为候选状态。该 JEP 建议通过派生创建记录来增强 Java 语言。由于记录是不可变的对象,因此开发人员经常根据旧记录创建新记录来构建新的数据模型。派生创建通过简单地指定不同的组件从现有记录派生新记录来简化编码。

JEP 467,Markdown 文档注释,已从 JDK 草案 8316039 提升为候选状态。此功能建议支持以 Markdown 格式编写的 JavaDoc 文档注释,而不仅仅是 HTML 和 JavaDoc @ 标签的混合。这将使源代码形式的文档注释更容易编写和阅读。

JEP 466,类文件 API(第二个预览版),已从 JEP 草案 8324965 状态提升为候选状态。本次 JEP 建议进行第二轮预览,以获得上一轮预览的反馈,即 JEP 457,由 JDK 22 交付的 Class-File API(预览版)。该功能提供了用于解析、生成和转换的 API Java 类文件。它最初的目的是作为 JDK 中 ASM(Java 字节码操作和分析框架)的替代品,并计划作为公共 API 向外界开放。 Oracle 的 Java 语言架构师 Brian Goetz 将 ASM 描述为“一个带有大量遗留包袱的旧代码库”,并提供了有关草案如何演变并最终取代 ASM 的背景信息。

JEP 465(字符串模板)已从 JEP 草案 8323333 状态提升为候选状态。本次 JEP 提议在两轮预览后最终确定该功能,即 JEP 459,由 JDK 22 交付的字符串模板(String Templates),以及 JEP 430,由 JDK 21 交付的字符串模板(String Templates,预览版)。此功能通过字符串模板增强了 Java 编程语言,字符串模板是包含可在运行时解释的嵌入式表达式的字符串常量。嵌入的表达式在运行时进行评估和验证。关于 JEP 430 的更多细节可以在 InfoQ 的新闻报道中找到。

JEP 401,Null-Restricted Value Object Storage (Preview),以前称为Primitive Classes (Preview),在Valhalla项目中,引入了开发者声明的Primitive Classes),即Value Objects API定义的特殊类型的值类,定义新的原始类型。

Oracle Java 架构师 Paul Sandoz 提交了 JEP 草案 8326878,Vector API(孵化器)。经过从 JDK 16 到 JDK 22 的七轮孵化,本次 JEP 建议在 JDK 23 中重新孵化该 API。与 JDK 22 相比,API 不会发生任何变化,实现也不会发生实质性变化。该功能将引入一个 API,用于“表达向量计算,可以在运行时可靠地编译成受支持的 CPU 架构上的最佳向量指令,从而获得比同等标量计算更好的性能”。

Bierman 和 PatientEXP 创始人兼首席执行官 Archie Cobbs 提出了 JEP 草案 8325803,Flexible Constructor Bodies (Second Preview),其中提出了第二次预览和更名以获得上一轮的支持。预览反馈,即 JEP 447:super(...) 前导语句(Super(...) 之前的语句,预览)将由 JDK 22 提供。此功能允许构造函数中的语句不引用实例创建为出现在 this() 或 super() 调用之前并保留现有的安全和初始化保证。此 JEP 中的更改包括: 本地类的处理;放宽调用显式构造函数之前不能访问字段的限制,即调用显式构造函数之前不能读取字段的要求。 Bierman 提供了此功能的初始规范,以供 Java 社区审核和反馈。

JEP 草案 8307341,准备限制 JNI 的使用,建议限制本质上不安全的 Java 本机接口 (JNI) 的使用,同时还使用受限方法限制外部函数和内存中 Java 本机接口 (JNI) 的使用在 FFM)API 中,这预计将成为 JDK 23 中的最终功能。从 JDK 23 开始,Java 运行时将显示有关使用 JNI 的警告,除非 FFM 用户启用了不安全通过命令行进行本地访问。预计在 JDK 23 之后的版本中,使用 JNI 将抛出异常而不是警告。

JEP 草案 8313278“Java 虚拟机的提前编译”提出“增强 Java 虚拟机加载编译为本机代码的 Java 应用程序和库的能力,以加快启动和基线执行速度”。

JEP 草案 8312611“计算常量”(预览版)引入了计算常量的概念,它被定义为最多初始化一次的不可变值持有者。它具有 Final 字段的性能和安全优势,同时在初始化时序方面提供更大的灵活性。此功能将作为预览 API 首次亮相。

JEP 草案 8283227(JDK 源结构)是一个信息性 JEP,描述了 JDK 源代码以及 JDK 存储库中相关文件的总体布局和结构。此 JEP 提案可帮助开发人员适应 JDK 9 中提供的 JEP 201(模块化源代码)中描述的源代码结构。

JEP 草案 8278252(JDK 打包和安装指南)是一份信息性 JEP,提出了在 macOS、Linux 和 Windows 上创建 JDK 安装程序的指南,以减少不同 JDK 提供商之间的安装问题。 JDK 冲突的风险。其目的是通过标准化安装目录名称、包名称和安装程序中可能导致冲突的其他元素,在安装较新版本的 JDK 时提供更好的体验。

我们预计 Oracle 很快就会开始为 JDK 23 开发更多 JEP。

参考链接:

https://www.infoq.com/news/2024/03/java-22-so-far/

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

28阅读

java中冒号,java双冒号

2026年09月06日

26阅读

java中的->,java中的是什么意思

2026年09月06日

26阅读

java中的super用法,Java中super的说明

2026年09月06日

28阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

26阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

26阅读