【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

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:008872

评论

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

Lightroom Classic 2024 for Mac(LRC2024) v13.2.0中文版

iMac小白

Lightroom Classic 2024

git中的cherry-pick和merge有些区别以及cherry-pick怎么用

百度搜索:蓝易云

git 云计算 Linux 运维 云服务器

全媒体广告代理要求高不?普通人创业做微信朋友圈广告加盟 利润全拿

互联网创业说

推荐几个AI的好工具,大家快收藏

AIWeker

AI工具

为什么有的人说技术不重要,有的人说重要?

程序员k哥

编程 程序员 技术 计算机

Excel 2021 LTSC for Mac:强大且稳定的电子表格处理工具

iMac小白

Excel 2021破解版 Excel 2021永久版 Excel 2021 LTSC下载

优化Mac鼠标性能,MouseBoost PRO专业首选

iMac小白

MouseBoost PRO下载 MouseBoost PRO破解版 MouseBoost PRO中文版

PrismNET棱镜协议,我是如何从一名穷屌丝逆袭的!

PrismNET

dapp web3 #区块链 PrismNET棱镜协议 棱镜协议

互联网全媒体广告代理合作 微信朋友圈广告代理 创业全扶持

互联网广告小哥

Git常见问题:git pull和git pull--rebase二者区别

百度搜索:蓝易云

git 云计算 Linux 运维 云服务器

交互式数字人代替真人客服!

青否数字人

2024-05-04:用go语言,给定一个起始索引为0的字符串s和一个整数k。 要进行分割操作,直到字符串s为空: 选择s的最长前缀,该前缀最多包含k个不同字符; 删除该前缀,递增分割计数。如果有剩余

福大大架构师每日一题

福大大架构师每日一题

foobar2000 for mac(多功能音频播放器)v2.6.4免激活版

iMac小白

foobar2000中文版 foobar2000破解版 foobar2000下载

Linux设备驱动系列(11) —— sysfs文件系统

Linux内核拾遗

C语言 linux开发 Linux内核 sysfs 设备驱动

Alfred 5 for Mac(Mac应用快速启动器)

iMac小白

Alfred 5下载 Alfred 5 Mac Alfred 5破解版

KeyShot 2024 Pro for Mac 3D渲染和动画制作软件

iMac小白

写作的关键问题:要不要写、怎么写、写什么?

石云升

写作 成长 阅读

《自动机理论、语言和计算导论》阅读笔记:p352-P401

codists

编译原理

薇娅全网被封!虚拟数字人能否代替真人主播?

青否数字人

支付系统概述(十三):资金安全保障

agnostic

支付系统设计与实现

腾讯朋友圈广告业务授权加盟-微信朋友圈广告正规资质代理合作

互联网创业说

互联网广告项目代理 腾讯微信朋友圈广告代理加盟 利润80%

互联网广告践行者

全媒体广告代理加盟 互联网信息流广告代理商怎么做

Geek_dd3828

AI虚拟人/数字人有哪些应用场景?

青否数字人

互联网全媒体广告投放项目代理合作政策,互联网广告代理怎么做

Geek_dd3828

龙智【“AI”协同 创未来】线下研讨会报名进行中:全面解读Jira、Confluence及Jira Service Management等Atlassian产品及其AI功能

龙智—DevSecOps解决方案

Web server failed to start. Port 8080 was already in use.之解决方法

百度搜索:蓝易云

云计算 Linux 运维 Web 8080

MouseBoost PRO for Mac:Mac用户的鼠标神器

iMac小白

MouseBoost Pro MouseBoost PRO下载 MouseBoost PRO破解版 MouseBoost PRO中文版

KeyShot 2024 Pro for Mac:高效创意展示的首选工具

iMac小白

KeyShot 2024 KeyShot2024下载 KeyShot 2024安装包

青否数字人直播间怎么免费搭建!

青否数字人

数字人

Mysql和Oracle的语法区别?

百度搜索:蓝易云

MySQL oracle sql Linux 运维

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