写点什么

Java 21:下一个 LTS 版本,提供了虚拟线程、记录模式和模式匹配

作者:Michael Redlich

  • 2023-10-12
    北京
  • 本文字数:3662 字

    阅读完需:约 12 分钟

大小:2.14M时长:12:27
Java 21:下一个LTS版本,提供了虚拟线程、记录模式和模式匹配

Oracle发布Java 编程语言和虚拟机的第21个版本。这是自 2021 年JDK 17发布以来的第一个长期支持(LTS)版本。最终的特性集包括以下 15 个 JEP:

 

其中有三个——虚拟线程、记录模式和 switch 模式匹配——已经完成了各自的预览,现已最终确定。

 

如下图所示,JDK 21的特性开发节奏和前两个 LTS 版本(即 JDK 17 和 JDK 11)以及以前其他的 JDK 版本类似。



Azul 副首席执行官Simon Ritter告诉 InfoQ:


JDK 21 将是 OpenJDK 发行版的下一个长期支持(LTS)版本。这一点很重要,因为许多企业用户在生产环境中都只使用这样的版本。长远来看,将会有大量的用户采用。然而,大部分用户在部署前会等待 6 到 12 个月,以便新特性可以经历更多真实世界的测试,发现的 Bug 得以修复。

 

JDK 21 包含了许多新特性,涵盖了平台的各个方面:语言、库、JVM 和工具。

 

JDK 21 最突出的特性也许是虚拟线程,它从预览特性变成了完整特性。对于使用一请求一线程模型的应用程序来说,这是提高性能和可扩展性的理想选择,因为线程在等待 IO 上花费了大量的时间。作为 Loom 项目的一部分,开发人员对这个特性可谓期待已久。

 

对于开发人员,该版本提供了各种与模式匹配有关的语言级特性。记录模式和 switch 模式匹配都成了完整特性。还有一个小而强大的特性是未命名模式和变量。向量 API(用于数值密集型计算)和外部函数 &内存 API(Panama 项目的一部分)将继续以孵化器的形式开发。

 

看下自 JDK 17 以来的新特性总表就会知道,这个新的 Java LTS 版本对开发人员和最终用户将会很有吸引力。

 

下面我们将进一步探讨下其中的一些 JEP,提供一些 JDK 21 的资源,并预测下 JDK 22 中可能包含哪些特性。

 

虚拟线程


JEP 444(虚拟线程)根据前两轮预览的反馈最终确定了这个特性:JEP 436(虚拟线程第二次预览)在 JDK 20 中交付;JEP 425(虚拟线程第一次预览)在 JDK 19 中交付。该特性为 Java 平台提供了虚拟线程。这种轻量级的线程可以显著减少编写、维护和观测高吞吐量并发应用程序的工作量。JEP 436 最重要的变化是,虚拟线程现在完全支持线程本地变量,取消了不使用这些变量的选项。要了解关于 JEP 444 的更多细节,可以阅读InfoQ的这篇新闻报道以及 José Paumard(Oracle Java 平台组 Java 开发大使)提供的 JEP Café截屏视频

 

记录模式


在 Amber 项目的支持下,JEP 440(记录模式)最终确定了这一特性,并根据前两轮预览的反馈进行了增强:JEP 432(记录模式第二次预览)在 JDK 20 中交付;JEP 405(记录模式第一次预览)在 JDK 19 中交付。该特性通过记录模式增强了语言解构记录值的能力。记录模式可以与类型模式结合使用,以“实现强大的声明式可组合数据导航和处理形式”。最近,类型模式通过 JEP 420(switch模式匹配第二次预览,在 JDK 18 中交付)和 JEP 406(switch模式匹配第一次预览,在 JDK 17 中交付)进行了扩展,已可用于switchcase 标签。JEP 432 最重要的变化是删除了在增强型for语句头中使用记录模式的支持。要了解关于 JEP 440 的更多细节,可以阅读InfoQ的这篇新闻报道

 

Switch 模式匹配


也是在 Amber 项目的支持下,JEP 441(switch模式匹配)最终确定了这个特性,并根据前四轮预览的反馈进行了增强:JEP 433(switch模式匹配第四次预览)在 JDK 20 中交付;JEP 427(switch模式匹配第三次预览)在 JDK 19 中交付;JEP 420(switch模式匹配第二次预览)在 JDK 18 中交付;JEP 406(switch模式匹配第一次预览)在 JDK 17 中交付。该特性通过在switch表达式和语句中使用模式匹配增强了该语言。要了解关于 JEP 441 的更多细节,可以阅读InfoQ的这篇新闻报道

 

未命名类和实例的 Main 方法(预览)


JEP 445(未命名类和实例的Main方法预览)之前称为灵活的 Main 方法和匿名 Main 类(预览)隐式类与增强 Main 方法(预览)。它提出“改进 Java 语言,使学生可以编写他们的第一个程序,而不需要了解为大型程序设计的语言特性。”该 JEP 延续了 Oracle Java 语言架构师Brian Goetz在 2022 年 9 月发表的博文Paving the on-ramp。Oracle 技术顾问Gavin Bierman已经发布了规范文档的初稿供 Java 社区审查。要了解关于 JEP 445 的更多细节,可以阅读InfoQ的这篇新闻报道

 

RoadTo21


Java 开发关系团队——Billy KorandoAna-Maria MihalceanuJosé Paumard 和Nicolai Parlog——提供了一系列时长约 20 分钟的视频教程,代号为 #RoadTo21,其中介绍了更多关于 JDK 21 特性的细节:

 

JDK 21 发布会


JDK 21发布会于 2023 年 9 月 19 日 UTC 时间 13:00-21:00 进行了直播,由 Parlog、Mihalceanu 和 Korando 主持。这次活动邀请了众多嘉宾,并进行了 Java First Java Always 专题讨论,探讨 JDK 21 的特性。整个过程在拉斯维加斯的 Oracle CloudWorld 进行了实况直播。

 

专题讨论小组的成员包括:Oracle 开发关系高级总监Sharat Chander、Oracle Java 平台组软件开发高级副总裁Georges Saab;Oracle 开发关系副总裁Chad Arimura;Oracle 编程语言设计师Daniel Smith

 

该小组发布了四份公告:一个新的Java Playground,基于 JShell 实用程序,可用于编写和执行 Java 代码;Java 社区现在可以向dev.java网站提供内容了;一个新的Java Developer Relations Github 存储库;JDK 11 将至少支持到 2032 年。

 

JDK 22


目前,JDK 22 中会包含哪些 JEP 尚不确定。但是,根据最近提交的 JEP 草案和建议最终某项特性的 JEP 候选,我们已经可以推测出哪些 JEP 有可能包含在 JDK 22 中。

 

JEP 454(外部函数&内存API)建议在两轮孵化和三轮预览后最终确定该特性:JEP 412(外部函数&内存API第一轮孵化)在 JDK 17 中交付;JEP 419(外部函数&内存API第二轮孵化)在 JDK 18 中交付;JEP 424(外部函数&内存API第一次预览)在 JDK 19 中交付;JEP 434(外部函数&内存API第二次预览)在 JDK 20 中交付;JEP 442(外部函数&内存API第三次预览)将在即将发布的 JDK 21 GA 版本中交付。自上一个版本以来的改进包括:新增清单属性Enable-Native-Access,使可执行 JAR 文件中的代码可以调用受限方法,而无需使用--enable-native-access标识;允许客户端以编程方式构建 C 函数描述符,避免使用特定于平台的常量;改进对本地内存可变长数组的支持;在本地字符串中支持多字符集。

 

Panama项目的支持下,JEP 草案 8315945向量API第七轮孵化)包含了针对前六轮孵化反馈的增强:JEP 448(向量API第六轮孵化)将在即将发布的 JDK 21 GA 版本中交付;JEP 438(向量API第五轮孵化)在 JDK 20 中交付;JEP 426(向量API第四轮孵化)在 JDK 19 中交付;JEP 417(向量API第三轮孵化)在 JDK 18 中交付;JEP 414(向量API第二轮孵化)在 JDK 17 中交付;JEP 338(向量API第一轮孵化)在 JDK 16 中作为孵化器模块交付。JEP 448 最重要的变化包括增强JVM编译器接口(JVMCI)以支持向量 API 值。

 

JEP 草案 8277163值对象预览)建议创建值对象,它们是无标识值类,用于指定其实例的行为。该草案与 JEP 401(空限制值对象存储预览)相关,并将继续为实现Valhalla项目做出贡献。

 

Daniel Smith是 Oracle 的编程语言设计师。他更新了 JEP 401(空限制值对象存储预览),以便与 Oracle 的最新设计思想“在语言和类文件中表达扁平化(flattenability)”保持一致。该提案最初名为 Primitive Classes(预览版),支持值对象(见JEP Draft 8277163)的空限制存储,即在字段和数组组件中将它们初始化为类的初始实例,并拒绝空值写入尝试。

 

JEP 草案 8311828未命名模式和变量)建议在上一轮预览的基础上最终确定该特性:JEP 443(未命名模式和变量预览)在 JDK 21 中交付。这个 JEP 将“使用未命名模式(可以匹配记录组件,而不需要说明组件的名称或类型)和未命名变量(可以初始化,但不能使用)来增强语言。”两者都用下划线字符表示,如r instanceof _(int x, int y)r instanceof _

 

根据 Oracle Java 平台组首席架构师Mark Reinhold的建议,JDK 22的正式发布日期暂定为 2024 年 3 月 19 日。其特性预计将于 2023 年 12 月初冻结。要了解关于其他 JEP 草案和候选的更多细节,可以阅读InfoQ的这篇详细报道

 

JDK 21 现在已经可以从Oracle官网上下载,其他供应商的二进制文件预计也将很快提供。

 

原文链接:

https://www.infoq.com/news/2023/09/java21-released/


相关阅读:

Java 近期新闻:JCP 25 周年、外部函数 & 内存 API、Eclipse Epicyro

JVM 语言比较研究:Java、Kotlin 和 Scala 的利与弊

Java 21:最新进展一览

2023-10-12 08:009424

评论

发布
暂无评论
发现更多内容

使用接口隔离原则优化 Cache 类的设计

极客李

架构师训练营第二周学习总结

子豪sirius

第 02 周 开发编程框架 命题作业

Jaye

第 2 周 - 课后作业

大海

极客大学架构师训练营 编程的本质与未来 第三课 听课总结

John(易筋)

极客时间 极客大学 架构师 极客大学架构师训练营 编程的未来

架构师训练营 - 第二周作业

Melo

架构师训练营 Week 02 作业

Wancho

架构师训练营-week2-作业

晓-Michelle

极客大学架构师训练营

软件设计原则

jason

架构师训练营 -week2-总结

sljoai

架构师实现自己架构的主要手段

_MISSYOURLOVE

极客大学架构师训练营

架构师训练营第二周 - 总结

无心水

极客时间 架构师 极客大学架构师训练营 23种设计模式 面向对象设计原则

架构师训练营-week2-作业

sljoai

作业 week

架构师训练营--第二周作业

_MISSYOURLOVE

极客大学架构师训练营 第二周作业

极客大学架构师训练营--编程的未来 面向对象 依赖倒置原则 -- 第二次作业

John(易筋)

极客时间 极客大学 架构师 极客大学架构师训练营 依赖倒置原则

第二周作业

大雄

依赖倒置

架构师训练营 - 第二周作业

zcj

极客大学架构师训练营

架构师训练营第2周总结

Glowry

极客大学架构师训练营

依赖倒置原则

Halley

训练营第二周作业

Mr冰凉

训练营第二周总结

Mr冰凉

OOD设计原则之DIP

无心水

极客大学架构师训练营 面向对象设计原则 OOD SOLID

Week 02- 作业:设计原则

dean

极客大学架构师训练营

架构师训练营第0期第二周作业

无名氏

依赖倒置原则 DIP 依赖反转原则

第 2 周 - 学习总结

大海

极客大学架构师训练营

小师妹学JVM之:深入理解JIT和编译优化-你看不懂系列

程序那些事

Java JVM JIT 签约计划第二季

架构师训练营第二周作业 (3)

烟雨濛濛

Flink on Zeppelin (3) - Streaming篇

Geek_8o1tcx

大数据 flink 流计算 Zeppelin

分布式唯一ID解析

Chank

设计原则之依赖倒置和接口隔离

极客大学架构师训练营 依赖倒置 设计原则 接口隔离

架构师训练营」第 2 周作业

edd

架构 极客大学架构师训练营

Java 21:下一个LTS版本,提供了虚拟线程、记录模式和模式匹配_编程语言_InfoQ精选文章