JDK 19:Java 19 中的新特性

Java Development Kit 19 是标准 Java 的非 LTS(长期支持)版本,今天作为生产版本发布。

该版本的七大功能包括结构化并发、记录模式、外部函数和内存 API 的预览,以及对开源 Linux/RISC-V 指令集架构 (ISA) 的支持。 除 Linux/RISC-V 功能外,所有功能都处于预览或孵化器阶段。

JDK 19 是在 JDK 18 于 3 月 22 日发布之后发布的。标准 Java 已经有五年的六个月发布周期了,JDK 19 是第十个六个月发布的版本。

JDK 19 可在 oracle.com 上获得。 生产版本遵循两个发布候选和两个斜坡阶段,可追溯到 6 月。 JDK 19 的特性包括:

    处于孵化器阶段的结构化并发旨在通过结构化并发 API 简化多线程编程。 这种并发将在不同线程中运行的多个任务视为一个工作单元,以简化错误处理和取消。 可靠性和可观察性得到改善。 此功能来自 Project Loom,它引入了一种新的轻量级并发模型。 记录模式预览,解构记录值。 可以嵌套记录模式和类型模式,以实现声明式、强大且可组合的数据导航和处理形式。 该提案的目标包括扩展模式匹配以表达更复杂、可组合的数据查询,同时不改变类型模式的语法或语义。 该提案建立在模式匹配的基础上 instanceof,于 2021 年 3 月在 JDK 16 中交付。未来的计划可能要求使用数组模式和 vararg 模式。 Record patterns 是 Project Amber 的一部分,它致力于探索和孵化更小的、面向生产力的 Java 特性。 外部函数和内存 API 的预览,它将引入一个 API,Java 程序可以通过该 API 与 Java 运行时之外的代码和数据进行互操作。 通过有效地调用外部函数(即 JVM 外部的代码)和安全地访问外部内存(即不受 JVM 管理的内存),API 使 Java 程序能够调用本地库和处理本地数据,而没有 Java Native 的危险和脆弱性接口(JNI)。 外部函数和内存 API 结合了两个早期的孵化 API:外部内存访问 API 和外部链接器 API。 外部函数和内存 API 之前在 JDK 17 中孵化,并在 JDK 18 中重新孵化。该提案的目标包括易用性、性能、通用性和安全性。 虚拟线程预览,它们​​是轻量级线程,可显着减少编写、维护和观察高吞吐量并发应用程序的工作量。 目标包括使以简单的每个请求一个线程的方式编写的服务器应用程序能够以接近最佳的硬件利用率进行扩展,使使用 java.lang 线程 API 以最小的变化采用虚拟线程,并支持使用现有 JDK 工具对虚拟线程进行故障排除、调试和分析。 本提案的目标不是更改 Java 中的基本并发模型或在 Java 语言或 Java 库中提供新的数据并行结构。 删除传统的线程实现或静默迁移现有应用程序以使用虚拟线程也不是目标。 此功能也是 Project Loom 的一部分。 switch 表达式和语句的模式匹配的第三个预览,将模式匹配扩展到 switch, 允许针对多个模式测试表达式,每个模式都有特定的操作,因此可以简洁安全地表达复杂的面向数据的查询。 此功能以前在 JDK 17 和 JDK 18 中进行过预览。第三次预览将添加改进,包括将受保护的模式替换为 when 中的条款 switch 块。 Also, the runtime semantics of a pattern switch when the value of the selector expression is null are more closely aligned with legacy switch 语义。 该计划的目标包括扩大表现力和适用性 switch 通过允许模式出现在案例标签中来表达和陈述。 其他目标包括允许开发人员放松对 switch 当需要时,提高安全性 switch 陈述并确保现有的 switch 表达式和语句继续编译而不会发生任何变化,并以相同的语义执行。 希望最终在整个 Java 中支持模式匹配,将其添加到使用表达式的地方。 此功能也是 Amber 项目的一部分。 向量 API 的第四次孵化将表达向量计算,这些计算可以在运行时可靠地编译为支持的 CPU 架构上的最佳向量指令,从而实现优于等效标量计算的性能。 使用 API 的开发人员获得了一种在 Java 中编写复杂矢量算法的方法,使用 HotSpot 自动矢量化器,但具有使矢量化更可预测和更健壮的用户模型。 矢量 API 以前被孵化到 JDK 16、JDK 17 和 JDK 19 中。为 JDK 19 提议的 API 改进包括增强加载和存储矢量的功能 MemorySegments,由外部函数和内存 API 预览版定义。 JDK 19 还将添加两个跨通道向量操作,压缩和扩展,以及一个互补的向量掩码压缩操作。 压缩向量操作将由掩码选择的源向量的通道映射到按通道顺序排列的目标向量,而扩展操作则相反。 compress操作在过滤查询结果时很有用。另外在vector API的基础上,将扩展bitwise integral lanewise operations,包括计算一位的个数、反转位的顺序、压缩和扩展位等操作。 API 的目标包括清晰简洁、与平台无关、在 x64 和 AArch64 架构上具有可靠的运行时和编译性能,以及在矢量计算无法在运行时完全表示为序列的情况下实现“优雅”降级矢量操作。 矢量 API 来自 Project Panama,旨在简化本机代码和 JVM 代码之间的通信。 通过 Linux/RISC-V 端口,Java 将获得对硬件指令集的支持,而该指令集已经被广泛的语言工具链所支持。 RISC-V 实际上是一个相关 ISA 家族。 Linux/RISC-V 端口仅支持 RISC-V 的 RV64GV 配置,RISC-V 是一种包含矢量指令的通用 64 位 ISA。 Java 的开发人员将来可能会考虑其他 RISC-V 配置。

该端口将支持以下 HotSpot VM 选项:模板解释器、C1(客户端)JIT 编译器、C2(服务器)JIT 编译器,以及所有当前的主线垃圾收集器,包括 ZGC 和 Shenandoah。 实际移植接近完成; JDK 增强提案 (JEP) 的重点是将端口集成到 JDK 主线存储库中。

与 JDK 18 一样,JDK 19 也将是一个短期版本,只有六个月的顶级 Premier 支持。

之前的版本 JDK 17 是一个长期支持 (LTS) 版本,提供了数年的支持。 它于 2021 年 9 月 14 日发布。下一个 LTS 版本 JDK 21 将于一年后发布,之前是 JDK 20,大概是在 2023 年 3 月。

阅读更多

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注