当前位置: 首页 > 后端技术 > Node.js

JDK19的新特性

时间:2023-04-04 00:29:50 Node.js

Java19将于9月发布,是一个非LTS版本,将具有结构化并发、虚拟线程、开关表达式模式匹配、向量API(向量)和Linux/RISC-V端口等特性。原定于今年9月发布的JavaDevelopmentKit19现已功能完善,并已进入第二个降级阶段。该版本有七个特性,包括结构化并发、记录模式、外部函数和内存API预览,以及对开源Linux/RISC-V指令集架构(ISA)的支持。随着标准Java发布过程中的这一最新里程碑,其他计划中的功能,例如通用泛型和值对象,将不得不等待平台的更高版本。JDK19紧随3月22日JDK18的到来。标准Java的发布周期为六个月。JDK19计划于9月20日正式发布用于生产,之前的发布候选版本分别为8月11日和8月25日。初始阶段于上个月达到。可以在JDK.java.net/19访问JDK19的早期访问版本。JDK19的特性包括:在孵化器阶段,StructuredConcurrency(https://openjdk.org/jeps/428)旨在通过StructuredConcurrencyAPI简化多线程编程。这种并发性将在不同线程中运行的多个任务视为一个工作单元,以简化错误处理和取消。提高了可靠性和可观察性。record模式record(https://openjdk.org/jeps/405)的预览,用于解构record记录值。可以嵌套记录模式和类型模式,以实现声明式、强大且可组合的数据导航和操作形式。该提案的目标包括扩展模式匹配以表达更复杂、可组合的数据查询,同时不改变类型模式的语法或语义。该提案建立在instanceof的模式匹配之上,将于2021年在JDK16中交付。未来的计划可能需要扩展记录模式,使其具有数组模式和可变参数模式等功能。记录模式是Amber项目的一部分,该项目旨在探索和培养更小的、面向生产力的Java特性。ForeignFunctionsandMemoryAPI(https://openjdk.org/jeps/424)的预览,它将介绍一个API,Java程序可以通过该API与Java运行时之外的代码和数据进行互操作。通过高效地调用外部函数(即JVM之外的代码)和安全地访问外部内存(即不受JVM管理的内存),API使Java程序能够在没有Java原生机器接口的情况下调用原生库和处理原生数据(JNI)的危险和漏洞。ForeignFunctionsandMemoryAPI结合了两个早期的孵化API:ForeignMemoryAccessAPI和ForeignLinkerAPI。外部函数和内存API之前在JDK17中孵化,并在JDK18中重新计算。该提案的目标包括易用性、性能、通用性和安全性。VirtualThreads的预览(https://openjdk.org/jeps/425),这是一种轻量级线程,可以显着减少编写、维护和观察高吞吐量并发应用程序的工作量。目标包括使以简单的请求线程样式编写的服务器应用程序能够以接近最佳的硬件利用率进行扩展,并使使用java.langThreadAPI的现有代码能够采用虚拟线程并进行最少的更改,并使用现有的JDK工具进行故障排除、调试和分析虚拟线程。本提议的目标不是改变Java中的基本并发模型,也不是在Java语言或Java库中提供新的数据并行结构。删除旧的线程实现或静默地将现有应用程序迁移到虚拟线程也不是目标。switch表达式和语句模式匹配的第三个预览(https://openjdk.org/jeps/427),将模式匹配扩展到switch,允许表达式针对多个模式进行测试,每个模式都有特定的操作,因此面向复杂的数据可以简洁安全地表达查询。此功能之前已在JDK17和JDK18中进行了预览。第三次预览将添加一些改进,包括用switch块中的when子句替换受保护的模式。Additionally,theruntimesemanticsofmodeswitchesaremoreconsistentwithtraditionalswitchsemanticswhentheselectorexpressionevaluatestonull.该计划的目标包括通过允许模式出现在case标签中来扩展switch表达式和语句的表达能力和适用性。其他目标包括允许开发人员在需要时放松switch历史上的零敌意,提高switch语句的安全性,并确保现有的switch表达式和语句继续编译而无需更改并以相同的语义执行。第四个是向量向量API(https://openjdk.org/jeps/426),它将向量计算表示为最佳向量指令,这些指令在运行时可靠地编译为支持的CPU架构,从而实现比同等标量计算更好的性能。使用API的开发人员获得了一种在Java中编写复杂矢量算法的方法,使用热点自动矢量,但用户模型使矢量化更可预测和更健壮。VectorAPI之前被纳入JDK16、JDK17和JDK19。JDK19提出的API改进包括增强加载和存储到MemorySegment的向量,如外部函数和内存API预览版所定义。JDK19还将添加两个跨通道向量操作,压缩和扩展,以及一个互补的向量掩码压缩操作。压缩向量操作将掩码选择的源向量的通道按通道顺序映射到目标向量,而扩展操作则相反。压缩操作在过滤查询结果时很有用。除了vectorAPI之外,bitwiseintegrallanewise操作将被扩展到包括计算位数、反转位顺序、压缩和扩展位等操作。API的目标包括在x64和AArch64架构上的简洁性、平台独立性、可靠的运行时和编译性能,以及在向量计算无法在运行时完全表示为向量操作序列的情况下的“优雅”降级。通过Linux/RISC-V端口,Java将获得对各种语言工具链已经支持的硬件指令集的支持。RISC-V实际上是一个相关的ISA家族。Linux/RISC-V端口将仅支持RISC-V的RV64GV配置,RISC-V是一种包含矢量指令的通用64位ISA。Java开发人员将来可能会考虑其他RISC-V配置。该端口将支持以下HotSpotVM选项:模板解释器、C1(客户端)JIT编译器、C2(服务器)JIT编译器和所有当前的主线垃圾收集器,包括ZGC和Shenandoah。实际的端口几乎完成;JDK增强计划(JEP)专注于将端口集成到JDK主线存储库中。与JDK18一样,JDK19也将是一个短暂的版本,只有六个月的支持。之前的版本JDK17是一个长期支持(LTS)版本,支持数年直至2021年9月14日。