JDK 19:Java 19的目标功能
虚拟线程、开关表达式的模式匹配、矢量API和Linux/RISC-V端口都将在Java 19中出现,这是一个将于9月发布的非LTS标准Java。
将于今年9月发布的Java Development Kit 19现在有五个正式提议的功能。最近增加的三个功能,即外来函数和内存API、虚拟线程和模式匹配(都是预览版),加入了之前提到的两个功能,即向量API(处于第四次孵化中)和将JDK移植到开源的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功能包括。
- 预览外国函数和内存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中进行过预览。第三次预览将增加完善的内容,包括用开关块中的when子句替换有防护的模式。另外,当选择器表达式的值为空时,模式切换的运行时语义与传统的切换语义更加一致。该计划的目标包括:通过允许模式出现在案例标签中,扩大switch表达式和语句的表现力和适用性,允许在需要时放松switch的历史性null-hostility,提高switch语句的安全性,并确保现有的switch表达式和语句在编译时不会发生变化,并以相同的语义执行。
- 第四个孵化的矢量API,将表达矢量计算,在运行时可靠地编译为支持的CPU架构上的最佳矢量指令,从而实现优于同等标量计算的性能。使用该API的开发者获得了一种在Java中编写复杂的矢量算法的方法,使用HotSpot自动矢量器,但有一个用户模型,使矢量化更可预测和稳健。矢量API先前已被纳入JDK 16、JDK 17和JDK 19。
为JDK 19提议的API改进包括按照外国函数和内存API预览的定义,在MemorySegments中加载和存储矢量的改进。JDK 19还将增加两个跨道矢量操作,即压缩和扩展,以及一个互补的矢量掩码压缩操作。压缩向量操作将由掩码选择的源向量的车道按车道顺序映射到目标向量,而扩展操作则做相反的操作。压缩操作在过滤查询结果时非常有用。
在向量API的另一个新增功能中,将扩展位积分lanewide操作,包括计算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支持。