IT资讯
卡巴斯基称拼多多 App 包含恶意代码
Redis 错误导致 ChatGPT 数据泄露,技术细节一并公布
Twitter 源代码泄露
ChatGPT 开始支持插件:可联网、可执行代码等
Docker 撤回受争议的收费方案,不再取消 Free Team 订阅
JDK 20 / Java 20 正式 GA
2023年Java程序员生存指南
Java 正经历变革性的复兴,企业向 Java 17 迁移
macOS “深藏” 比特币白皮书
TIOBE 4 月榜单:Zig 进入 Top 50,Go 保住前 10 位置
微星 1.5TB 源代码等数据泄漏,赎金 400 万美元
Microsoft PowerToys 即将获得 ChatGPT 支持
Linux 早期发展史
Google 称内部全在用 Kotlin 搞安卓开发,体验碾压 Java
Kotlin 2.0 和 Kotlin K2 编译器即将发布
开源静态站点生成器
Ubuntu 23.04 / 22.10 性能对比,英特尔 12 代 CPU 性能暴跌
大厂开源之殇
加密邮件服务 Proton Mail 推出开源密码管理器
Java 17 采用率飙升四倍,Amazon 成最受欢迎 JDK 供应商
爱奇艺客户端 “白嫖” 电视机,后台满速上传
Beaver Notes:一款开源的私人记事本应用
Java 21:下一个 LTS 版本,提供了虚拟线程、记录模式和模式匹配
TiDB 7.4 发版:正式兼容 MySQL 8.0
Rust 1.73.0 发布
Ubuntu 23.10 正式发布,不妨趁周五升级一波!
Stack Overflow 2024 年度开发者调查报告
Llama 3.1 - 405B、70B 和 8B 的多语言与长上下文能力解析
继裁掉Python团队后,谷歌Go团队也迎来动荡:团队灵魂人物、领导Go十二年的技术负责人突然宣布退位_编程语言_核子可乐_InfoQ精选文章
本文档使用 MrDoc 发布
-
+
Java 21:下一个 LTS 版本,提供了虚拟线程、记录模式和模式匹配
 Oracle[发布](https://mail.openjdk.org/pipermail/jdk-dev/2023-September/008267.html)Java 编程语言和虚拟机的[第21个版本](https://openjdk.org/projects/jdk/21/)。这是自 2021 年[JDK 17](https://openjdk.java.net/projects/jdk/17/)发布以来的第一个长期支持(LTS)版本。最终的特性集包括以下 15 个 JEP: - JEP 430:[字符串模板(预览版)](https://openjdk.org/jeps/430) - JEP 431:[有序集合](https://openjdk.org/jeps/431) - JEP 439:[分代式ZGC](https://openjdk.org/jeps/439) - JEP 440:[记录模式](https://openjdk.org/jeps/440) - JEP 441:[switch模式匹配](https://openjdk.org/jeps/441) - JEP 442:[外部函数&内存API(第三个预览版)](https://openjdk.org/jeps/442) - JEP 443:[未命名模式和变量(预览版)](https://openjdk.org/jeps/443) - JEP 444:[虚拟线程](https://openjdk.org/jeps/444) - JEP 445:[未命名类和实例的Main方法(预览版)](https://openjdk.org/jeps/445) - JEP 446:[作用域值(预览版)](https://openjdk.org/jeps/446) - JEP 448:[向量API(第六轮孵化)](https://openjdk.org/jeps/448) - JEP 449:[弃用Windows 32-bit x86移植,为删除做准备](https://openjdk.org/jeps/449) - JEP 451:[准备禁用代理的动态加载](https://openjdk.org/jeps/451) - JEP 452:[密钥封装机制API](https://openjdk.org/jeps/452) - JEP 453:[结构化并发(预览版)](https://openjdk.org/jeps/453) 其中有三个——虚拟线程、记录模式和 switch 模式匹配——已经完成了各自的预览,现已最终确定。 如下图所示,[JDK 21的特性开发节奏](https://blogs.oracle.com/java/post/the-arrival-of-java-21)和前两个 LTS 版本(即 JDK 17 和 JDK 11)以及以前其他的 JDK 版本类似。  Azul 副首席执行官[Simon Ritter](https://www.linkedin.com/in/siritter/)告诉 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([虚拟线程](https://openjdk.org/jeps/444))根据前两轮预览的反馈最终确定了这个特性:JEP 436([虚拟线程第二次预览](https://openjdk.org/jeps/436))在 JDK 20 中交付;JEP 425([虚拟线程第一次预览](https://openjdk.org/jeps/425))在 JDK 19 中交付。该特性为 Java 平台提供了虚拟线程。这种轻量级的线程可以显著减少编写、维护和观测高吞吐量并发应用程序的工作量。JEP 436 最重要的变化是,虚拟线程现在完全支持[线程本地变量](https://openjdk.org/jeps/8303683#Thread-local-variables),取消了不使用这些变量的选项。要了解关于 JEP 444 的更多细节,可以阅读[InfoQ的这篇新闻报道](https://www.infoq.com/news/2023/04/virtual-threads-arrives-jdk21/)以及 [José Paumard](https://www.linkedin.com/in/jos%C3%A9-paumard-2458ba5/)(Oracle Java 平台组 Java 开发大使)提供的 JEP Café[截屏视频](https://inside.java/2022/06/08/jepcafe11/)。 #### 记录模式 在 Amber 项目的支持下,JEP 440([记录模式](https://openjdk.org/jeps/440))最终确定了这一特性,并根据前两轮[预览](https://openjdk.java.net/jeps/12)的反馈进行了增强:JEP 432([记录模式第二次预览](https://openjdk.org/jeps/432))在 JDK 20 中交付;JEP 405([记录模式第一次预览](https://openjdk.org/jeps/405))在 JDK 19 中交付。该特性通过_记录模式_增强了语言解构记录值的能力。记录模式可以与_类型模式_结合使用,以“实现强大的声明式可组合数据导航和处理形式”。最近,类型模式通过 JEP 420([switch模式匹配第二次预览](https://openjdk.java.net/jeps/420),在 JDK 18 中交付)和 JEP 406([switch模式匹配第一次预览](https://openjdk.java.net/jeps/406),在 JDK 17 中交付)进行了扩展,已可用于`switch`case 标签。JEP 432 最重要的变化是删除了在增强型`for`语句头中使用记录模式的支持。要了解关于 JEP 440 的更多细节,可以阅读[InfoQ的这篇新闻报道](https://www.infoq.com/news/2023/05/java-gets-boost-with-record/)。 #### Switch 模式匹配 也是在 Amber 项目的支持下,JEP 441([switch模式匹配](https://openjdk.org/jeps/441))最终确定了这个特性,并根据前四轮预览的反馈进行了增强:JEP 433([switch模式匹配第四次预览](https://openjdk.org/jeps/433))在 JDK 20 中交付;JEP 427([switch模式匹配第三次预览](https://openjdk.org/jeps/427))在 JDK 19 中交付;JEP 420([switch模式匹配第二次预览](https://openjdk.java.net/jeps/420))在 JDK 18 中交付;JEP 406([switch模式匹配第一次预览](https://openjdk.java.net/jeps/406))在 JDK 17 中交付。该特性通过在`switch`表达式和语句中使用模式匹配增强了该语言。要了解关于 JEP 441 的更多细节,可以阅读[InfoQ的这篇新闻报道](https://www.infoq.com/news/2023/07/tranforming-java-pattern/)。 #### 未命名类和实例的 Main 方法(预览) JEP 445([未命名类和实例的Main方法预览](https://openjdk.org/jeps/445))之前称为_灵活的 Main 方法和匿名 Main 类(预览)_和_隐式类与增强 Main 方法(预览)_。它提出“改进 Java 语言,使学生可以编写他们的第一个程序,而不需要了解为大型程序设计的语言特性。”该 JEP 延续了 Oracle Java 语言架构师[Brian Goetz](https://www.linkedin.com/in/briangoetz/)在 2022 年 9 月发表的博文[_Paving the on-ramp_](https://openjdk.org/projects/amber/design-notes/on-ramp)。Oracle 技术顾问[Gavin Bierman](https://www.linkedin.com/in/gavin-bierman-a0173075/)已经发布了[规范文档](https://cr.openjdk.org/~gbierman/jep445/jep445-20230502/specs/unnamed-classes-instance-main-methods-jls.html)的初稿供 Java 社区审查。要了解关于 JEP 445 的更多细节,可以阅读[InfoQ的这篇新闻报道](https://www.infoq.com/news/2023/05/beginner-friendly-java/)。 #### RoadTo21 Java 开发关系团队——[Billy Korando](https://www.linkedin.com/in/billy-korando-129b8197/)、[Ana-Maria Mihalceanu](https://www.linkedin.com/in/ana-maria-mihalceanu-1508/)、[José Paumard](https://www.linkedin.com/in/jos%C3%A9-paumard-2458ba5/) 和[Nicolai Parlog](https://nipafx.dev/nicolai-parlog/)——提供了一系列时长约 20 分钟的视频教程,代号为 #RoadTo21,其中介绍了更多关于 JDK 21 特性的细节: - [Java 21带来了完整的模式匹配](https://inside.java/2023/09/17/roadto21-pattern-matching/),由 Parlog 提供 - [Java 21安全性](https://inside.java/2023/09/13/roadto21-security/),由 Mihalceanu 提供 - [Java 21 API变化](https://inside.java/2023/09/10/roadto21-api/),由 Paumard 提供 - [Java 21工具增强:全面改进](https://inside.java/2023/09/06/roadto21-performance/),由 Mihalceanu 提供 - [Java 21 JVM和GC改进](https://inside.java/2023/09/03/roadto21-performance/),由 Korando 提供 - [Java 21新特性:虚拟线程](https://inside.java/2023/08/30/roadto21-virtualthreads/),由 Paumard 提供 - [从Java 17升级到Java 21](https://inside.java/2023/08/27/roadto21-upgrade/),由 Parlog 提供 #### JDK 21 发布会 [JDK 21发布会](https://dev.java/community/java-21-launch/)于 2023 年 9 月 19 日 UTC 时间 13:00-21:00 进行了直播,由 Parlog、Mihalceanu 和 Korando 主持。这次活动邀请了众多嘉宾,并进行了 **Java First Java Always 专题讨论**,探讨 JDK 21 的特性。整个过程在拉斯维加斯的 Oracle CloudWorld 进行了实况直播。 专题讨论小组的成员包括:Oracle 开发关系高级总监[Sharat Chander](https://www.linkedin.com/in/sharatchander/)、Oracle Java 平台组软件开发高级副总裁[Georges Saab](https://www.linkedin.com/in/georgessaab/);Oracle 开发关系副总裁[Chad Arimura](https://www.linkedin.com/in/chadarimura/);Oracle 编程语言设计师[Daniel Smith](https://www.linkedin.com/in/dansmithjava/)。 该小组发布了四份公告:一个新的[Java Playground](https://dev.java/playground/),基于 JShell 实用程序,可用于编写和执行 Java 代码;Java 社区现在可以向[dev.java](https://dev.java/)网站[提供内容](https://dev.java/authors/)了;一个新的[Java Developer Relations](https://github.com/java) Github 存储库;JDK 11 将至少支持到 2032 年。 #### JDK 22 目前,JDK 22 中会包含哪些 JEP 尚不确定。但是,根据最近提交的 JEP 草案和建议最终某项特性的 JEP 候选,我们已经可以推测出哪些 JEP 有可能包含在 JDK 22 中。 JEP 454([外部函数&内存API](https://openjdk.org/jeps/454))建议在两轮孵化和三轮预览后最终确定该特性:JEP 412([外部函数&内存API第一轮孵化](https://openjdk.org/jeps/412))在 JDK 17 中交付;JEP 419([外部函数&内存API第二轮孵化](https://openjdk.org/jeps/419))在 JDK 18 中交付;JEP 424([外部函数&内存API第一次预览](https://openjdk.org/jeps/424))在 JDK 19 中交付;JEP 434([外部函数&内存API第二次预览](https://openjdk.org/jeps/434))在 JDK 20 中交付;JEP 442([外部函数&内存API第三次预览](https://openjdk.org/jeps/442))将在即将发布的 JDK 21 GA 版本中交付。自上一个版本以来的改进包括:新增清单属性`Enable-Native-Access`,使可执行 JAR 文件中的代码可以调用受限方法,而无需使用`--enable-native-access`标识;允许客户端以编程方式构建 C 函数描述符,避免使用特定于平台的常量;改进对本地内存可变长数组的支持;在本地字符串中支持多字符集。 在[Panama项目](https://openjdk.org/projects/panama/)的支持下,**JEP 草案 8315945**([向量API第七轮孵化](https://openjdk.org/jeps/8315945))包含了针对前六轮孵化反馈的增强:JEP 448([向量API第六轮孵化](https://openjdk.org/jeps/448))将在即将发布的 JDK 21 GA 版本中交付;JEP 438([向量API第五轮孵化](https://openjdk.org/jeps/438))在 JDK 20 中交付;JEP 426([向量API第四轮孵化](https://openjdk.org/jeps/426))在 JDK 19 中交付;JEP 417([向量API第三轮孵化](https://openjdk.java.net/jeps/417))在 JDK 18 中交付;JEP 414([向量API第二轮孵化](https://openjdk.java.net/jeps/414))在 JDK 17 中交付;JEP 338([向量API第一轮孵化](https://openjdk.java.net/jeps/338))在 JDK 16 中作为[孵化器模块](https://openjdk.java.net/jeps/11)交付。JEP 448 最重要的变化包括增强[JVM编译器接口](https://docs.oracle.com/en/graalvm/enterprise/20/docs/reference-manual/compiler/#graalvm-compiler)(JVMCI)以支持向量 API 值。 **JEP 草案 8277163**([值对象预览](https://openjdk.java.net/jeps/8277163))建议创建值对象,它们是无标识值类,用于指定其实例的行为。该草案与 JEP 401([空限制值对象存储预览](https://openjdk.java.net/jeps/401))相关,并将继续为实现[Valhalla项目](https://openjdk.java.net/projects/valhalla/)做出贡献。 [Daniel Smith](https://www.linkedin.com/in/dansmithjava/)是 Oracle 的编程语言设计师。他[更新](https://mail.openjdk.org/pipermail/valhalla-spec-observers/2023-August/002320.html)了 JEP 401([空限制值对象存储预览](https://openjdk.java.net/jeps/401)),以便与 Oracle 的最新设计思想“在语言和类文件中表达扁平化(flattenability)”保持一致。该提案最初名为 Primitive Classes(预览版),支持值对象(见[JEP Draft 8277163](https://openjdk.org/jeps/8277163))的空限制存储,即在字段和数组组件中将它们初始化为类的初始实例,并拒绝空值写入尝试。 **JEP 草案 8311828**([未命名模式和变量](https://openjdk.org/jeps/8311828))建议在上一轮预览的基础上最终确定该特性:JEP 443([未命名模式和变量预览](https://openjdk.org/jeps/443))在 JDK 21 中交付。这个 JEP 将“使用_未命名模式_(可以匹配记录组件,而不需要说明组件的名称或类型)和_未命名变量_(可以初始化,但不能使用)来增强语言。”两者都用下划线字符表示,如`r instanceof _(int x, int y)`和`r instanceof _`。 根据 Oracle Java 平台组首席架构师[Mark Reinhold](https://www.linkedin.com/in/markreinhold)的建议,[JDK 22](https://jdk.java.net/22/)的正式发布日期暂定为 2024 年 3 月 19 日。其特性预计将于 2023 年 12 月初冻结。要了解关于其他 JEP 草案和候选的更多细节,可以阅读[InfoQ的这篇详细报道](https://www.infoq.com/news/2023/09/java-21-so-far/)。 JDK 21 现在已经可以[从Oracle官网上下载](https://jdk.java.net/21/),其他供应商的二进制文件预计也将很快提供。 **原文链接:** [https://www.infoq.com/news/2023/09/java21-released/](https://www.infoq.com/news/2023/09/java21-released/) **相关阅读:** **[Java 近期新闻:JCP 25 周年、外部函数 & 内存 API、Eclipse Epicyro](https://www.infoq.cn/article/cR6cA98S1jv7e8KHGfpy)** **[JVM 语言比较研究:Java、Kotlin 和 Scala 的利与弊](https://www.infoq.cn/article/ThrjTB6kHMdXmjIPeaEv)** **[Java 21:最新进展一览](https://www.infoq.cn/article/QB87kOkWjf6jXxODkd9T)**
admin
2023年10月14日 06:27
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码