likes
comments
collection
share

JDK19中的新特性

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

Java19将于9月发布,是一个非LTS版本,它将以结构化并发、虚拟线程、切换表达式模式匹配、向量API(vector)和Linux/RISC-V端口为特色。

定于今年9月发布的Java Development Kit 19现在已经完成了功能,并进入了第二个降级阶段。该版本有七个功能,包括结构化并发、记录模式、外部函数和内存API预览,以及对开源Linux/RISC-V指令集体系结构(ISA)的支持。

随着标准Java发布过程中的这一最新里程碑,其他计划中的功能,如通用泛型和值对象,将不得不等待平台的更高版本。JDK 19紧随3月22日JDK 18的到来。标准Java的发布周期为六个月。

JDK 19计划于9月20日正式发布用于生产,之前的候选版本将于8月11日和8月25日发布。上个月达到了初始阶段。JDK 19的早期访问版本可以从JDK.java.net/19访问。JDK 19功能包括:

  • 在孵化器阶段,结构化并发( https://openjdk.org/jeps/428 )旨在通过结构化并发API简化多线程编程。这种并发性将在不同线程中运行的多个任务视为单个工作单元,以简化错误处理和取消。提高了可靠性和可观测性。

    • 记录模式record的预览( https://openjdk.org/jeps/405 ),用于解构record记录值。记录模式和类型模式可以嵌套,以实现声明性、强大且可组合的数据导航和处理形式。该提案的目标包括扩展模式匹配以表达更复杂、可组合的数据查询,同时不改变类型模式的语法或语义。该提案以 instanceof 的模式匹配为基础,于2021在JDK 16中交付。未来的计划可能要求使用阵列模式和 vararg 模式等功能扩展记录模式。记录模式是Amber项目的一部分,该项目旨在探索和培育更小的、面向生产力的Java特性。
    • 一个外部函数和内存API的预览( https://openjdk.org/jeps/424 ),它将引入一个API,通过该API,Java程序可以与Java运行时之外的代码和数据进行互操作。通过有效地调用外部函数(即JVM外部的代码)和安全地访问外部内存(即未由JVM管理的内存),API使Java程序能够调用本机库并处理本机数据,而不会出现Java本机接口( JNI )的危险和脆弱性。外部函数和内存API结合了两个早期的孵化API:外部内存访问API和外部链接器API。外部函数和内存API之前在JDK 17中孵化,并在JDK 18中重新计算。该提案的目标包括易用性、性能、通用性和安全性。

      • 虚拟线程的预览( https://openjdk.org/jeps/425 ),这是一种轻量级线程,可以显著减少编写、维护和观察高吞吐量并发应用程序的工作量。目标包括使以简单的请求线程风格编写的服务器应用程序能够以接近最佳的硬件利用率进行扩展,并启用使用java的现有代码java.lang Thread API以最小的变化采用虚拟线程,并使用现有JDK工具对虚拟线程进行故障排除、调试和评测。本提案的目标不是改变Java中的基本并发模型,也不是在Java语言或Java库中提供新的数据并行结构。删除线程的传统实现或静默地将现有应用程序迁移到虚拟线程也不是目标。
      • switch 表达式和语句模式匹配的第三个预览( https://openjdk.org/jeps/427 ),将模式匹配扩展到 switch ,允许针对多个模式测试表达式,每个模式都有一个特定的操作,因此可以简洁安全地表达复杂的面向数据的查询。此功能以前在JDK 17和JDK 18中进行了预览。第三次预览将添加一些改进,包括在开关块中用when子句替换受保护的模式。此外,当选择器表达式的值为null时,模式开关的运行时语义与传统开关语义更加一致。该计划的目标包括通过允许模式出现在 case 标签中,扩展switch表达式和语句的表达能力和适用性。其他目标包括允许开发人员在需要时放松 switch 的历史性零敌意,提高 switch 语句的安全性,并确保现有的 switch 表达式和语句继续编译而不发生更改,并以相同的语义执行。
      • 第四种是vector 矢量API( https://openjdk.org/jeps/426 ),它将矢量计算表示为在运行时可靠编译为支持的CPU架构上的最优矢量指令,从而实现优于等效标量计算的性能。使用API的开发人员获得了一种用Java编写复杂向量算法的方法,使用了热点自动向量器,但用户模型使向量化更加可预测和健壮。之前将载体API培养到JDK 16、JDK 17和JDK 19中。

        • 对JDK 19提出的API的改进包括增强了向MemorySegment加载和存储向量,这是由外部函数和内存API预览定义的。JDK 19还将添加两个交叉车道矢量操作,压缩和扩展,以及互补矢量掩码压缩操作。压缩向量操作将由掩码选择的源向量的车道按车道顺序映射到目标向量,而展开操作则相反。压缩操作在过滤查询结果时很有用。除了矢量API之外,还将扩展逐位积分lanewise操作,包括计算一位的数量、反转位的顺序以及压缩和扩展位等操作。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也将是短期版本,只有六个月的支持。

之前的版本JDK 17是一个长期支持(LTS)版本,支持了几年,直到2021 9月14日。