0

JDK 19:Java 19新特性

 3 months ago
source link: https://www.jdon.com/61084
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

JDK 19:Java 19新特性
将于 9 月发布的非 LTS 版本,Java 19 将具有结构化并发、虚拟线程、开关表达式的模式匹配、向量 API 和 Linux/RISC-V 端口。

JDK 19定于9月20日正式发布,供生产使用,在此之前,从7月21日开始是第二个夯实阶段,8月11日和8月25日将发布候选版本。JDK 19的早期访问版本可以从jdk.java.net/19访问。JDK 19的功能包括。

结构化并发
处于孵化阶段,旨在通过结构化并发库简化多线程编程。这种并发性将在不同线程中运行的多个任务视为一个工作单元,以简化错误处理和取消。可靠性和可观察性得到了改善。

记录模式的预览
为了解构记录值。记录模式和类型模式可以被嵌套,以实现数据导航和处理的声明性、强大和可组合的形式。该提案的目标包括扩展模式匹配,以表达更复杂、可组合的数据查询,同时不改变类型模式的语法或语义。该提案建立在实例的模式匹配基础上,于2021年3月在JDK 16中交付。未来的计划可能要求对记录模式进行扩展,如数组模式和vararg模式。记录模式是Project Amber的一部分,该项目旨在探索和孵化较小的、面向生产力的Java功能。

外函数和内存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的历史性null-hostility,增加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的配置。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK