暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

JDK 21:Java 21 中的新特性

云原生数据库 2023-05-06
535
Java开发工具包(JDK)21计划在9月作为下一个Oracle标准Java实现的长期支持版本发布,已提出了更多的功能,包括分代ZGC(Z Garbage Collector),记录模式,表达式和语句的模式匹配以及矢量API。这些加入了先前提出的JDK 20的其他四个功能:序列化集合,虚拟线程,字符串模板预览和第三个外部函数和内存API预览。
GPL下的早期访问二进制文件可在jdk.java.net上获得。Oracle每六个月发布一次标准Java的新版本,最近的JDK 20于3月21日发布。到目前为止,JDK 21的具体提案包括:
1、  Generational ZGC旨在通过扩展 ZGC 以维护新旧对象的不同代来提高应用程序性能。年轻的对象往往会早逝,保持不同的世代将使 ZGC 更频繁地收集它们。使用分代 ZGC 运行的应用程序应该会看到以下好处:分配停顿的风险降低、所需的堆内存开销降低以及垃圾收集 CPU 开销降低。与非分代 ZGC 相比,这些好处应该不会显着降低吞吐量。
2、  JDK 19和JDK 20中预览的记录模式将解构记录值。可以嵌套记录模式和类型模式,以实现强大的、声明式的和可组合的数据导航和处理形式。该提案的目标包括扩展模式匹配以解构记录类的实例并添加嵌套模式,从而实现更多可组合的数据查询。此功能与 switch 的模式匹配共同发展。当前 JEP(JDK 增强提案)中的记录模式建议根据持续的经验和反馈进一步完善该功能。除了较小的编辑更改外,自第二次预览以来的主要更改是删除了对出现在增强的标题中的记录模式的支持for陈述。该功能可能会在未来的 JEP 中重新提出。
3、  Pattern matching for switch是一项新特性,它可以测试switch表达式或语句是否与多个模式之一匹配,并针对每个模式执行特定操作,从而可以安全且简洁地表达复杂的面向数据的查询。该功能最初在JDK 17中提出,随后在JDK 18、JDK 19和JDK 20中进行了改进,JDK 21中将进行进一步改进和完善。与之前的JEP相比,其主要变化包括删除括号模式,允许在switch表达式和语句中使用限定的枚举常量,例如case常量。该功能的目标是通过允许模式出现在case标签中来扩展switch表达式和语句的表现力和适用性,当需要时放松switch的历史上对null的敌意,通过要求模式switch语句覆盖所有潜在的输入值来提高switch语句的安全性。另一个目标是确保现有的switch表达式和语句无需更改即可编译,并具有相同的语义。
4、  JDK 21 还将包含第六个孵化器:矢量 API,用于表达可靠地在运行时编译为支持的 CPU 架构上的最优矢量指令的矢量计算,其性能优于等效标量计算。此前,该功能已经在 JDK 16 到 JDK 20 中进行了孵化。最新版本包括性能增强和错误修复。该提案的目标包括清晰简洁、平台无关,以及在 x64 和 AArch64 架构上提供可靠的运行时编译和性能。其他目标包括优雅降级,以处理运行时无法完全表达为一系列矢量指令的矢量计算,以及与 Project Valhalla 对齐。
5、  外部函数和内存 API使 Java 程序能够与 Java 运行时之外的代码和数据进行互操作。通过高效地调用外部函数和安全地访问外部内存,这个预览 API 使 Java 程序能够调用本地库和处理本地数据,而没有 JNI(Java Native Interface)的脆弱性和危险性。该 API 之前在上个月首次亮相的JDK 20和 2022 年 9 月发布的JDK 19中进行了预览。最新预览版中的改进包括增强的布局路径和取消引用地址布局的新元素,集中管理本机的生命周期接口中的段Arena、后备本机链接器实现以及删除VaList. 该提案的目标包括易用性、性能、通用性和安全性。在此 API 之上重新实现 JNI 或以任何方式更改 JNI 都不是目标。
6、  Virtual threads是轻量级线程,承诺“显著”减少编写、维护和观察高吞吐量并发应用的工作量。该计划的目标包括使采用简单的“每请求一个线程”风格编写的服务器应用程序可以利用接近最优的硬件利用率进行扩展,使使用lang.Thread API的现有代码可以在最小更改的情况下采用虚拟线程,以及利用当前JDK工具轻松调试和分析虚拟线程。Virtual threads先前已在JDK 20和JDK 19中进行了预览,将在JDK 21中进行最终确定。在JDK 21中,virtual threads现在始终支持线程本地变量,并且不可能创建没有这些变量的virtual threads。对线程本地变量的保证支持确保更多现有库可以在不变的情况下与虚拟线程一起使用,并协助将基于任务的代码迁移到使用虚拟线程。
7、  序列化集合引入了接口来表示具有定义的遇到顺序的集合。每个集合都有明确定义的第一个和第二个元素,依此类推,直到最后一个元素。提供了统一的 API 来接受第一个和最后一个元素并以相反的顺序处理元素。激发该提案的是 Java 的集合框架的情况缺少一个集合类型来表示具有定义的遇到顺序的元素序列。它还缺乏适用于这些集合的统一操作集。这些差距一直是一个问题,也是投诉的来源。该提案要求定义用于集合、集合和映射排序的接口,并将其改装到现有的集合类型层次结构中。所有这些新方法都有默认实现。
8、  字符串模板作为预览功能出现,通过将文字文本与嵌入式表达式和处理器相结合来生成专门的结果,从而补充 Java 现有的字符串文字和文本块。此语言功能和 API 旨在通过简化 Java 程序的编写,使表达包含运行时计算值的字符串变得容易。它承诺增强表达式的可读性、提高程序安全性、保持灵活性并简化接受以非 Java 语言编写的字符串的 API 的使用。实现从组合文字文本和嵌入表达式派生的非字符串表达式的开发也是一个目标。
JDK 21的预计发布计划包括于6月8日和7月20日进行的逐渐降低阶段。第一阶段冻结特性集,但继续进行错误修复。然后在8月10日和8月24日发布初步和最终版本,仍然可能进行错误修复,最终在9月19日发布正式版。
作为一个长期支持(LTS)版本,JDK 21将获得五年的Premier支持和扩展支持,直到2031年9月。当前的LTS版本是JDK 17,于2021年9月发布。非LTS版本,如JDK 20和JDK 19,仅获得六个月的Premier支持和没有扩展支持。

文章转载自云原生数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论