likes
comments
collection

JDK 19:Java 19的新功能介绍

作者站长头像
站长
· 阅读数 49

JDK 19:Java 19的新功能

虚拟线程、开关表达式的模式匹配、矢量API和Linux/RISC-V端口都将在Java 19中出现,这是一个将于9月发布的非LTS标准Java。

将于今年9月发布的Java Development Kit 19刚刚提出了第七项功能:结构化并发,以简化多线程编程。结构化并发加入了之前的六个功能,包括记录模式、外国函数和内存API预览,以及对开源Linux/RISC-V指令集架构(ISA)的支持。

根据正在进行的增强Java的计划,JDK 19,或简称Java 19,有可能承载大量的功能,从通用泛型到价值对象。JDK 19将紧随3月22日发布的JDK 18。标准Java的发布周期为6个月。

OpenJDK的开发者已经发布了JDK 19的官方发布时间表,它将于9月20日作为生产版本发布,在此之前是6月9日和7月21日的缩减阶段,以及8月11日和8月25日发布的候选版本。

JDK 19的早期访问版本可以从jdk.java.net/19访问。拟议的JDK 19功能包括:

  • 结构化并发,处于孵化阶段,旨在通过结构化并发库简化多线程编程。这种并发性将在不同线程中运行的多个任务视为一个工作单元,以简化错误处理和取消。可靠性和可观察性得到了改善。
  • 记录模式的预览,以解构记录值。记录模式和类型模式可以被嵌套,以实现数据导航和处理的声明性、强大和可组合的形式。该提案的目标包括扩展模式匹配,以表达更复杂、可组合的数据查询,同时不改变类型模式的语法或语义。该提案建立在2021年3月在JDK 16 中交付的instanceof 的模式匹配的基础上。未来的计划可能会要求将记录模式扩展为数组模式和vararg 模式等功能。记录模式是Project Amber的一部分,该项目旨在探索和孵化较小的、面向生产力的Java功能。
  • 预览外国函数和内存API,它将引入一个API,通过这个API,Java程序可以与Java运行时之外的代码和数据进行互操作。通过有效地调用外来函数(即Java运行时之外的代码)和安全地访问外来内存(即不由JVM管理的内存),该API使Java程序能够调用本地库和处理本地数据,而没有Java本地接口(JNI)的危险和脆性。国外函数和内存API结合了两个早期的孵化API:国外内存访问API和国外链接器API。国外函数和内存API曾在JDK 17中孵化,在JDK 18中重新孵化。该提案的目标包括易用性、性能、通用性和安全性。
  • 虚拟线程的预览,这是一种轻量级的线程,大大减少了编写、维护和观察高吞吐量并发应用程序的工作量。目标包括:使以简单的每请求线程风格编写的服务器应用程序能够以接近最佳的硬件利用率进行扩展,使使用java.lang Thread API的现有代码能够以最小的改动采用虚拟线程,并能够使用现有的JDK工具对虚拟线程进行故障诊断、调试和分析。本建议的目标不是改变Java的基本并发模型,也不是在Java语言或Java库中提供新的数据并行结构。它的目标也不是删除线程的传统实现,或默默地将现有的应用程序迁移到使用虚拟线程。
  • 对switch表达式和语句的模式匹配的第三次预览,将模式匹配扩展到switch ,允许一个表达式针对一些模式进行测试,每个模式都有一个特定的动作,因此可以简明而安全地表达复杂的面向数据的查询。这项功能以前在JDK 17和JDK 18中进行过预览。第三次预览将增加完善的内容,包括在switch 块中用when 子句替换有防护的模式。另外,当选择器表达式的值为null时,模式切换的运行时语义与传统的switch 语义更加一致。该计划的目标包括通过允许模式出现在案例标签中来扩大switch 表达式和语句的表现力和适用性。其他目标包括允许开发者在需要时放宽switch 的历史性空值,提高switch 语句的安全性,并确保现有的switch 表达式和语句在编译时不会发生变化,并以相同的语义执行。
  • 第四个孵化的矢量API,将表达矢量计算,在运行时可靠地编译为支持的CPU架构上的最佳矢量指令,从而实现优于同等标量计算的性能。使用该API的开发者获得了一种在Java中编写复杂的矢量算法的方法,使用HotSpot自动矢量器,但有一个用户模型,使矢量化更可预测和稳健。矢量API先前已被纳入JDK 16、JDK 17和JDK 19。 为JDK 19提议的API改进包括增强向和从MemorySegments ,如外国函数和内存API预览所定义。JDK 19还将增加两个跨道矢量操作,即压缩和扩展,以及一个互补的矢量掩码压缩操作。压缩向量操作将由掩码选择的源向量的车道按车道顺序映射到目标向量,而扩展操作则做相反的操作。压缩操作在过滤查询结果时非常有用。 在向量API的另一个新增功能中,将扩展逐位积分的操作,包括计算1比特的数量、颠倒比特的顺序,以及压缩和扩展比特等操作。API的目标包括简洁明了,与平台无关,在x64和AArch64架构上具有可靠的运行和编译性能,并实现 "优雅 "的退化,以应对矢量计算在运行时不能完全表达为矢量操作序列的情况。
  • 通过Linux/RISC-V的移植,Java将获得对一个硬件指令集的支持,该指令集已经被广泛的语言工具链所支持。RISC-V实际上是一个相关ISA的系列。Linux/RISC-V端口将只支持RISC-V的RV64GV配置,这是一个包括矢量指令的通用64位ISA。Java的开发者可能会在将来考虑其他RISC-V的配置。

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

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

之前的版本,JDK 17,是一个长期支持(LTS)版本,有几年的支持期。