您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

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

时间:2023-09-28 11:12:26  来源:InfoQ  作者:

作者 | Michael Redlich

译者 | 平川

策划 | 丁晓昀

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

  • JEP 430:字符串模板(预览版)
  • JEP 431:有序集合
  • JEP 439:分代式 ZGC
  • JEP 440:记录模式
  • JEP 441:switch 模式匹配
  • JEP 442:外部函数 & 内存 API(第三个预览版)
  • JEP 443:未命名模式和变量(预览版)
  • JEP 444:虚拟线程
  • JEP 445:未命名类和实例的 MAIn 方法(预览版)
  • JEP 446:作用域值(预览版)
  • JEP 448:向量 API(第六轮孵化)
  • JEP 449:弃用 windows 32-bit x86 移植,为删除做准备
  • JEP 451:准备禁用代理的动态加载
  • JEP 452:密钥封装机制 API
  • JEP 453:结构化并发(预览版)

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

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

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

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 Korando、Ana-Maria Mihalceanu、José Paumard 和 Nicolai Parlog——提供了一系列时长约 20 分钟的视频教程,代号为 #RoadTo21,其中介绍了更多关于 JDK 21 特性的细节:

  • Java 21 带来了完整的模式匹配,由 Parlog 提供
  • Java 21 安全性,由 Mihalceanu 提供
  • Java 21 API 变化,由 Paumard 提供
  • Java 21 工具增强:全面改进,由 Mihalceanu 提供
  • Java 21 JVM 和 GC 改进,由 Korando 提供
  • Java 21 新特性:虚拟线程,由 Paumard 提供
  • 从 Java 17 升级到 Java 21,由 Parlog 提供

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/



Tags:Java   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
17 个你需要知道的 JavaScript 优化技巧
你可能一直在使用JavaScript搞开发,但很多时候你可能对它提供的最新功能并不感冒,尽管这些功能在无需编写额外代码的情况下就可以解决你的问题。作为前端开发人员,我们必须了解...【详细内容】
2024-04-03  Search: Java  点击:(4)  评论:(0)  加入收藏
你不可不知的 15 个 JavaScript 小贴士
在掌握如何编写JavaScript代码之后,那么就进阶到实践——如何真正地解决问题。我们需要更改JS代码使其更简单、更易于阅读,因为这样的程序更易于团队成员之间紧密协...【详细内容】
2024-03-21  Search: Java  点击:(25)  评论:(0)  加入收藏
Oracle正式发布Java 22
Oracle 正式发布 Java 22,这是备受欢迎的编程语言和开发平台推出的全新版本。Java 22 (Oracle JDK 22) 在性能、稳定性和安全性方面进行了数千种改进,包括对Java 语言、其API...【详细内容】
2024-03-21  Search: Java  点击:(10)  评论:(0)  加入收藏
构建一个通用灵活的JavaScript插件系统?看完你也会!
在软件开发中,插件系统为应用程序提供了巨大的灵活性和可扩展性。它们允许开发者在不修改核心代码的情况下扩展和定制应用程序的功能。本文将详细介绍如何构建一个灵活的Java...【详细内容】
2024-03-20  Search: Java  点击:(20)  评论:(0)  加入收藏
Java 8 内存管理原理解析及内存故障排查实践
本文介绍Java8虚拟机的内存区域划分、内存垃圾回收工作原理解析、虚拟机内存分配配置,以及各垃圾收集器优缺点及场景应用、实践内存故障场景排查诊断,方便读者面临内存故障时...【详细内容】
2024-03-20  Search: Java  点击:(14)  评论:(0)  加入收藏
如何编写高性能的Java代码
作者 | 波哥审校 | 重楼在当今软件开发领域,编写高性能的Java代码是至关重要的。Java作为一种流行的编程语言,拥有强大的生态系统和丰富的工具链,但是要写出性能优异的Java代码...【详细内容】
2024-03-20  Search: Java  点击:(21)  评论:(0)  加入收藏
在Java应用程序中释放峰值性能:配置文件引导优化(PGO)概述
译者 | 李睿审校 | 重楼在Java开发领域,优化应用程序的性能是开发人员的持续追求。配置文件引导优化(Profile-Guided Optimization,PGO)是一种功能强大的技术,能够显著地提高Ja...【详细内容】
2024-03-18  Search: Java  点击:(24)  评论:(0)  加入收藏
对JavaScript代码压缩有什么好处?
对JavaScript代码进行压缩主要带来以下好处: 减小文件大小:通过移除代码中的空白符、换行符、注释,以及缩短变量名等方式,可以显著减小JavaScript文件的大小。这有助于减少网页...【详细内容】
2024-03-13  Search: Java  点击:(2)  评论:(0)  加入收藏
跨端轻量JavaScript引擎的实现与探索
一、JavaScript 1.JavaScript语言JavaScript是ECMAScript的实现,由ECMA 39(欧洲计算机制造商协会39号技术委员会)负责制定ECMAScript标准。ECMAScript发展史: 2.JavaScript...【详细内容】
2024-03-12  Search: Java  点击:(2)  评论:(0)  加入收藏
面向AI工程的五大JavaScript工具
令许多人惊讶的是,一向在Web开发领域中大放异彩的JavaScript在开发使用大语言模型(LLM)的应用程序方面同样大有价值。我们在本文中将介绍面向AI工程的五大工具,并为希望将LLM...【详细内容】
2024-02-06  Search: Java  点击:(52)  评论:(0)  加入收藏
▌简易百科推荐
Java 8 内存管理原理解析及内存故障排查实践
本文介绍Java8虚拟机的内存区域划分、内存垃圾回收工作原理解析、虚拟机内存分配配置,以及各垃圾收集器优缺点及场景应用、实践内存故障场景排查诊断,方便读者面临内存故障时...【详细内容】
2024-03-20  vivo互联网技术    Tags:Java 8   点击:(14)  评论:(0)  加入收藏
如何编写高性能的Java代码
作者 | 波哥审校 | 重楼在当今软件开发领域,编写高性能的Java代码是至关重要的。Java作为一种流行的编程语言,拥有强大的生态系统和丰富的工具链,但是要写出性能优异的Java代码...【详细内容】
2024-03-20    51CTO  Tags:Java代码   点击:(21)  评论:(0)  加入收藏
在Java应用程序中释放峰值性能:配置文件引导优化(PGO)概述
译者 | 李睿审校 | 重楼在Java开发领域,优化应用程序的性能是开发人员的持续追求。配置文件引导优化(Profile-Guided Optimization,PGO)是一种功能强大的技术,能够显著地提高Ja...【详细内容】
2024-03-18    51CTO  Tags:Java   点击:(24)  评论:(0)  加入收藏
Java生产环境下性能监控与调优详解
堆是 JVM 内存中最大的一块内存空间,该内存被所有线程共享,几乎所有对象和数组都被分配到了堆内存中。堆被划分为新生代和老年代,新生代又被进一步划分为 Eden 和 Survivor 区,...【详细内容】
2024-02-04  大雷家吃饭    Tags:Java   点击:(56)  评论:(0)  加入收藏
在项目中如何避免和解决Java内存泄漏问题
在Java中,内存泄漏通常指的是程序中存在一些不再使用的对象或数据结构仍然保持对内存的引用,从而导致这些对象无法被垃圾回收器回收,最终导致内存占用不断增加,进而影响程序的性...【详细内容】
2024-02-01  编程技术汇  今日头条  Tags:Java   点击:(68)  评论:(0)  加入收藏
Java中的缓存技术及其使用场景
Java中的缓存技术是一种优化手段,用于提高应用程序的性能和响应速度。缓存技术通过将计算结果或者经常访问的数据存储在快速访问的存储介质中,以便下次需要时可以更快地获取。...【详细内容】
2024-01-30  编程技术汇    Tags:Java   点击:(72)  评论:(0)  加入收藏
JDK17 与 JDK11 特性差异浅谈
从 JDK11 到 JDK17 ,Java 的发展经历了一系列重要的里程碑。其中最重要的是 JDK17 的发布,这是一个长期支持(LTS)版本,它将获得长期的更新和支持,有助于保持程序的稳定性和可靠性...【详细内容】
2024-01-26  政采云技术  51CTO  Tags:JDK17   点击:(88)  评论:(0)  加入收藏
Java并发编程高阶技术
随着计算机硬件的发展,多核处理器的普及和内存容量的增加,利用多线程实现异步并发成为提升程序性能的重要途径。在Java中,多线程的使用能够更好地发挥硬件资源,提高程序的响应...【详细内容】
2024-01-19  大雷家吃饭    Tags:Java   点击:(105)  评论:(0)  加入收藏
这篇文章彻底让你了解Java与RPA
前段时间更新系统的时候,发现多了一个名为Power Automate的应用,打开了解后发现是一个自动化应用,根据其描述,可以自动执行所有日常任务,说的还是比较夸张,简单用了下,对于office、...【详细内容】
2024-01-17  Java技术指北  微信公众号  Tags:Java   点击:(95)  评论:(0)  加入收藏
Java 在 2023 年仍然流行的 25 个原因
译者 | 刘汪洋审校 | 重楼学习 Java 的过程中,我意识到在 90 年代末 OOP 正值鼎盛时期,Java 作为能够真正实现这些概念的语言显得尤为突出(尽管我此前学过 C++,但相比 Java 影响...【详细内容】
2024-01-10  刘汪洋  51CTO  Tags:Java   点击:(74)  评论:(0)  加入收藏
站内最新
站内热门
站内头条