网易首页 > 网易号 > 正文 申请入驻

Java 22 正式发布

0
分享至


作者 | Michael Redlich

译者 | 张卫滨

策划 | Tina

今天,Oracle 发布了 JDK 22,包含 12 项新特性,可以分为四类,即核心 Java 库Java 语言规范HotSpotJava 工具。该公司还热衷于吸引新开发人员的关注,部分方法是改进对 Visual Studio Code (VS Code) 的支持。

JDK 22 是一个特性版本,这意味着 Oracle 将为其提供 6 个月的支持,直到下一个特性版本发布。LTS 版本(例如 JDK 21)则可获得长达 8 年的支持。下一个 LTS 版本将是 Java 25,计划于 2025 年 9 月发布。

Oracle 宣称 Java 是“当今科技趋势的排名第一语言”,并且它是“排名第一的企业 /IT 组织使用语言”。据 Oracle 称,目前有 630 亿个活跃的 Java 虚拟机 (JVM) 和 410 亿个基于云的 JVM 正在使用。

这些新特性中,有六个新特性归类在核心 Java 库下:

  • JEP 454:外部函数和内存 API(Foreign Function & Memory API)

  • JEP 457:类文件 API(Class-File API,预览)

  • JEP 460:向量 API(Vector API,第七轮孵化)

  • JEP 461:流聚合器(Stream Gatherers,预览)

  • JEP 462:结构化并发(Structured Concurrency,第二轮预览)

  • JEP 464:作用域值(Scoped Values,第二轮预览)

四个新特性归类在Java 语言规范下:

  • JEP 447:super(...) 前导语句(Statements before super(...),预览)

  • JEP 456:未命名变量和模式(Unnamed Variables & Patterns)

  • JEP 459:字符串模板(String Templates,第二轮预览)

  • JEP 463:隐式声明类和实例主方法(Implicitly Declared Classes and Instance Main Methods,第二轮预览)一个新特性归类在HotSpot下:

  • JEP 423:G1 的区域锚定(Region Pinning for G1)

最后,还有一个新特性归类在Java 工具下:

  • JEP 458:启动多文件源码程序(Launch Multi-File Source-Code Programs)我们对其中的一些新特性进行研究,并将其归类到四个主要的 Java 项目中,即 Amber、Loom、Panama 和 Valhalla,这些项目旨在通过精巧的合并,孵化一系列组件,以便最终将其纳入到 JDK 中。

Amber 项目

JEP 463,隐式声明类和实例主方法(Implicitly Declared Classes and Instance Main Methods,第二轮预览),以前被称为未命名类和实例主方法(Unnamed Classes and Instance Main Methods,预览)、灵活主方法和匿名主类(Flexible Main Methods and Anonymous Main Classes,预览)和隐式类和增强的主方法(Implicit Classes and Enhanced Main Methods,预览),该 JEP 包含了对前一轮 预览 反馈的增强,即 JEP 445,未命名类和实例主方法(预览)。这个 JEP 建议“演进 Java 语言,这样学生们就可以编写他们的第一个程序,而不需要理解为大型程序所设计的语言特性”。这篇 JEP 延续了甲骨文的 Java 语言架构师 Brian Goetz 在 2022 年 9 月发表的博客文章 Paving the on-ramp。甲骨文的技术顾问 Gavin Bierman 已经 发布了 规范文档的 初稿,供 Java 社区审查。关于 JEP 445 的更多细节可以在 InfoQ 的 新闻报道 中找到。


JEP 459,字符串模板(String Templates,第二轮预览),提供了对第一轮预览的再次预览,即 JDK 21 交付的 JEP 430, 字符串模板(String Templates,预览)。这个特性通过字符串模板对 Java 编程语言进行了增强,字符串模板是包含嵌入式表达式的字符串常量,可以在运行时进行解释,嵌入的表达式将在运行时进行计算和校验。关于 JEP 430 的更多详细信息可以参见 InfoQ 的 新闻报道。

JEP 456,未命名变量和模式(Unnamed Variables & Patterns),建议在上一轮的预览后最终确定该特性,即 JDK 21 交付的 JEP 443, 未命名模式和变量(Unnamed Patterns and Variables,预览)。这个特性建议“用未命名的模和未命名变量来增强语言,前者与记录组件相匹配,但无需说明组件的名称和类型,后者可以被初始化但不使用”。这两者均由下划线字符表示,如r instanceof _(int x, int y)r instanceof _

JEP 447,super(...) 前导语句(Statements before super(...),预览),该 JEP 建议允许构造函数中不引用正在创建的实例的语句出现在this()super()调用之前,并保留现有的安全性和初始化保证。Bierman 提供了该特性的 初始规范,供 Java 社区评审和反馈。

Loom 项目

JEP 464,作用域值(Scoped Values,第二次预览),以前被称为范围局部变量(Extent-Local Variables,孵化),这个 JEP 建议在 JDK 22 中进行第二轮预览,不做任何更改,以便于从上一轮预览中获得额外的经验和反馈,即 JDK 21 交付的 JEP 446, 作用域值(预览) 和 JDK 20 交付的 作用域值(孵化)。该特性允许在线程内部和线程之间共享不可变数据。这种方式优于 thread-local 变量,特别是在使用大量虚拟线程的时候。

JEP 462,结构化并发(Structured Concurrency,第二次预览),这个 JEP 将提议进行第二轮预览,不做任何变更,以便于从上一轮预览中获取更多的反馈,即 JDK 21 交付的 JEP 453,结构化并发(Structured Concurrency,预览)。这个特性通过引入结构化并发性来简化并发编程,“将在不同线程中运行的相关任务组视为单个工作单元,从而简化错误处理和取消,提高可靠性并增强可观测性。”

Panama 项目

JEP 460,Vector API(第七轮孵化),吸收了对前六轮孵化反馈的改进,即 JDK 21 交付的 JEP 448,Vector API (第六轮孵化)、JDK 20 交付的 JEP 438,Vector API (第五轮孵化)、JDK 19 交付的 JEP 426,Vector API (第四轮孵化)、JDK 18 交付的 JEP 417,Vector API (第三轮孵化)、JDK 17 交付的 JEP 414,Vector API (第二轮孵化) 以及在 JDK 16 中以 孵化器模块 交付的 JEP 338,Vector API(孵化)。JEP 448 最重要的变更包括对 JVM 编译器接口(JVM Compiler Interface,JVMCI)的增强,以支持 Vector API 值。

JEP 454,外部函数和内存 API(Foreign Function & Memory API),建议在经历了两轮孵化和三轮预览之后确定该特性,即 JDK 17 中交付的 JEP 412, 外部函数和内存 API(Foreign Function & Memory API,孵化器)、JDK 18 中交付的 JEP 419,外部函数和内存 API(Foreign Function & Memory API,第二轮孵化)、JDK 19 中交付的 JEP 424,外部函数和内存 API(Foreign Function & Memory API,预览)、JDK 20 中交付的 JEP 434,外部函数和内存 API(Foreign Function & Memory API,第二轮预览) 和 JDK 21 中交付的 JEP 442,外部函数和内存 API(Foreign Function & Memory API,第三轮预览)。自上一个版本以来的改进包括:新的Enable-Native-Accessmanifest 属性,允许可执行 JAR 包中的代码调用受限制的方法而无需使用--enable-native-access标志;允许客户端通过编程的方式构建 C 函数描述符,避免使用特定于平台的常量;改进了对本地内存中可变长度数组的支持;支持多字符集本地字符串。关于 JEP 454 的更多细节请参见 InfoQ 的 新闻报道。

JDK 23

JDK 23 计划于 2024 年 9 月正式发布,目前只有一个 JEP 列入了目标之中。不过,根据一些候选和草案 JEP,尤其是那些已提交的 JEP,我们可以推测还有哪些 JEP 可能被纳入 JDK 23。

JEP 455,模式、instanceof 和 switch 中的原始类型(Primitive Types in Patterns, instanceof, and switch,预览) 已经成为 JDK 23 的Targeted状态。该 JEP 位于 Amber 项目下,建议通过允许在所有模式上下文中使用原始类型来增强模式匹配,并扩展instanceofswitch以允许使用原始类型。甲骨文公司的核心技术人员 Aggelos Biboudis 最近 发布 了该功能的最新 规范草案。

JEP 468,派生记录创建(Derived Record Creation,预览),已经从JDK Draft 8321133提升 到了Candidate状态。该 JEP 建议通过派生创建记录来增强 Java 语言。由于记录是不可变的对象,开发人员经常会根据旧记录创建新记录,以建立新数据模型。派生创建可从现有记录派生出新记录,只需指定不同的组件即可,从而简化代码编写。

JEP 467,Markdown 文档注释(Markdown Documentation Comments),已经从 JDK Draft 8316039提升 到了Candidate状态。该特性建议支持 JavaDoc 文档注释以 Markdown 格式编写,而不仅仅是 HTML 和 JavaDoc@标记的混合体。这将使文档注释更易于编写,也更易于以源代码形式阅读。

JEP 466,类文件 API(Class-File API,第二轮预览),已经从JEP Draft 8324965状态 提升 到了Candidate状态。该 JEP 建议进行第二轮的预览,以便于获取上一轮预览的反馈,也就是 JDK 22 即将交付的 JEP 457,类文件 API(Class-File API,预览)。该特性提供了一个 API 来解析、生成和转换 Java 类文件。它最初作为 JDK 中 ASM 的替代品,ASM 是一个 Java 字节码操作和分析框架,并计划将其作为公开 API 对外开放。甲骨文的 Java 语言架构师 Brian Goetz 将 ASM 描述为“带有大量遗留包袱的旧代码库”,并提供了关于该草案如何发展并最终取代 ASM 的 背景信息。

JEP 465,字符串模板(String Templates),已经从JEP Draft 8323333状态 提升 到了Candidate状态。该 JEP 建议在两轮的预览之后最终确定该特性,也就是 JDK 22 即将交付的 JEP 459,字符串模板(String Templates,第二轮预览) 和 JDK 21 交付的 JEP 430,字符串模板(String Templates,预览)。这个特性通过字符串模板对 Java 编程语言进行了增强,字符串模板是包含嵌入式表达式的字符串常量,可以在运行时进行解释,嵌入的表达式将在运行时进行计算和校验。关于 JEP 430 的更多详细信息可以参见 InfoQ 的 新闻报道。

JEP 401,Null-Restricted 值对象存储(Null-Restricted Value Object Storage,预览),以前被称为原始类(Primitive Classes,预览),位于 Valhalla 项目中,它引入了开发人员声明的原始类(Primitive Classes),即由值对象 API 定义(Value Objects API)的特殊类型的值类,它们定义了新的原始类型。

甲骨文的 Java 架构师 Paul Sandoz 提交了JEP Draft 8326878,Vector API(孵化器)。经历了从 JDK 16 到 JDK 22 的七轮孵化后,本 JEP 建议在 JDK 23 中重新孵化API,与 JDK 22 相比,不会对 API 进行更改,也不对实现进行实质性的变更。该特性将引入一个 API,用于“表达向量计算,这些计算可在运行时可靠地编译为所支持 CPU 架构上的最佳向量指令,从而实现优于同等标量计算的性能”。

Bierman 和 PatientEXP 的创始人兼 CEOArchie Cobbs 提出了JEP Draft 8325803, 灵活的构造函数方法体(Flexible Constructor Bodies,第二轮预览),该 JEP 建议进行第二轮预览并更改名称,以获取对上一轮预览的反馈,也就是 JDK 22 即将交付的 JEP 447:super(...) 前导语句(Statements before super(...),预览)。该特性允许构造函数中不引用正在创建的实例的语句出现在this()super()调用之前,并保留现有的安全性和初始化保证。该 JEP 中的变更包括:对本地类的处理;将在显式构造函数调用前不能访问字段的限制进行了放宽,即在显式构造函数调用前不能读取字段的要求。Bierman 提供了该特性的 初始规范,供 Java 社区评审和反馈。

JEP Draft 8307341,准备限制对 JNI 的使用(Prepare to Restrict The Use of JNI),建议限制使用本质上不安全的 Java 本地接口 (Java Native Interface,JNI),同时在外部函数和内存 (Foreign Function & Memory,FFM)API 中使用受限方法,该 API预计将在 JDK 23 中成为最终特性。从 JDK 23 开始,除非 FFM 用户在命令行上启用了不安全的本地访问,否则 Java 运行时将显示关于使用 JNI 的警告。预计在 JDK 23 之后的版本中,使用 JNI 将抛出异常而非警告。

JEP Draft 8313278,Java 虚拟机的预先编译(Ahead of Time Compilation for the Java Virtual Machine),建议“增强 Java 虚拟机加载编译为原生代码的 Java 应用程序和库的能力,以加快启动和基线执行”。

JEP Draft 8312611,已计算常量(Computed Constants,预览),引入了已计算常量的概念,它被定义为最多初始化一次的不可变值持有者。它具有final字段在性能和安全性方面的优势,同时在初始化时机方面具有更大的灵活性。该功能将作为 预览API 首次亮相。

JEP Draft 8283227,JDK 源码结构(JDK Source Structure),这是一个信息型的 JEP,描述了 JDK 源代码的整体布局和结构以及 JDK 仓库中的相关文件。该 JEP 建议帮助开发人员适应 JDK 9 中交付的 JEP 201,Modular Source Code(模块化源代码) 所描述的源代码结构。

JEP Draft 8278252,JDK 打包和安装指南(JDK Packaging and Installation Guidelines),这是一个信息型的 JEP,建议提供在 macOS、Linux 和 Windows 上创建 JDK 安装程序的指南,以降低不同 JDK 提供商之间安装 JDK 发生冲突的风险。其目的是通过规范安装目录名称、软件包名称和安装程序中可能导致冲突的其他元素,使得在安装 JDK 更新版本时获得更好的体验。

我们预计甲骨文将很快开始为 JDK 23 制定更多 JEP。

https://www.infoq.com/news/2024/03/java-22-so-far/

https://www.theregister.com/2024/03/19/catch_java_22_now_available/

声明:本文为 InfoQ 翻译,未经许可禁止转载。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
一边税务总局说不会倒查30年,一边各地警税合成作战中心相继成立

一边税务总局说不会倒查30年,一边各地警税合成作战中心相继成立

历史总在押韵
2024-06-19 01:14:42
开机率跌至30%,拿什么拯救不断降低的开机率和开机时长

开机率跌至30%,拿什么拯救不断降低的开机率和开机时长

百姓家电
2024-06-17 17:30:33
普京的52岁堂侄女当上了副防长!商人兼心理学家,丈夫是能源部长

普京的52岁堂侄女当上了副防长!商人兼心理学家,丈夫是能源部长

译言
2024-06-18 06:44:36
赴美AI调研总结:中美科技生态反差,人家拼命搞创新,我们拼命搞低价

赴美AI调研总结:中美科技生态反差,人家拼命搞创新,我们拼命搞低价

小星球探索
2024-06-17 14:55:09
2-1!海港夺中超半程冠军,裁判屡次争议判罚,被球员指着鼻子骂

2-1!海港夺中超半程冠军,裁判屡次争议判罚,被球员指着鼻子骂

体坛纪录片
2024-06-18 21:45:18
中国女排新消息,奥运会大名单揭晓,赖亚文督战,朱婷伤病没问题

中国女排新消息,奥运会大名单揭晓,赖亚文督战,朱婷伤病没问题

宗介说体育
2024-06-18 16:35:45
未来三年,最好的投资,是守家

未来三年,最好的投资,是守家

洞见
2024-06-17 21:24:44
北大硕士赵斌:姜萍连题目都看不懂,点名王润秋,说错愿承担后果

北大硕士赵斌:姜萍连题目都看不懂,点名王润秋,说错愿承担后果

东东趣谈
2024-06-18 17:25:07
失去中国国籍代价有多高?身价千亿依然是待宰的羔羊

失去中国国籍代价有多高?身价千亿依然是待宰的羔羊

枫冷慕诗
2024-06-18 19:09:58
太悲壮!网传杭州亚运村业主联名:我自持自住,誓与亚运村共存亡

太悲壮!网传杭州亚运村业主联名:我自持自住,誓与亚运村共存亡

火山诗话
2024-06-18 16:52:31
解放军宣布:台海封不住!

解放军宣布:台海封不住!

灯前体育
2024-06-17 19:26:25
历史首人!C罗先发出战捷克,个人第6次出战欧洲杯刷新纪录

历史首人!C罗先发出战捷克,个人第6次出战欧洲杯刷新纪录

直播吧
2024-06-19 02:05:52
谭咏麟病愈后首次公开现身,瘦到青筋毕现感慨声线不好

谭咏麟病愈后首次公开现身,瘦到青筋毕现感慨声线不好

小萝卜天下事
2023-07-21 21:57:53
打脸了!北大网友怀疑姜萍考试作弊,中科院博士说她写的比我还快

打脸了!北大网友怀疑姜萍考试作弊,中科院博士说她写的比我还快

云舟史策
2024-06-18 18:42:31
中国香港重返全球竞争力五强,国际贸易和商业法规排名第一

中国香港重返全球竞争力五强,国际贸易和商业法规排名第一

南方都市报
2024-06-18 12:49:06
网传“南海打菲”喜传战果:有菲武装人员被断一指、被缴武器 ​​​

网传“南海打菲”喜传战果:有菲武装人员被断一指、被缴武器 ​​​

不掉线电波
2024-06-18 16:01:35
无缘奥运!媒体人:孙杨是没资格去奥运,这是体育总局一致要求

无缘奥运!媒体人:孙杨是没资格去奥运,这是体育总局一致要求

直播吧
2024-06-18 18:05:09
卸任7年后,主动交代问题的市政协原主席被逮捕

卸任7年后,主动交代问题的市政协原主席被逮捕

上观新闻
2024-06-18 17:02:09
福建上杭山体滑坡一寺庙倒塌 村民:一家6口为躲雨被埋失联,正在搜救中

福建上杭山体滑坡一寺庙倒塌 村民:一家6口为躲雨被埋失联,正在搜救中

红星新闻
2024-06-18 22:14:27
车圈大V曝:多家车企拖欠媒体车马费超半年,甚者已欠近一年

车圈大V曝:多家车企拖欠媒体车马费超半年,甚者已欠近一年

小萝卜丝
2024-06-18 18:16:24
2024-06-19 04:46:44
InfoQ
InfoQ
有内容的技术社区媒体
9918文章数 50091关注度
往期回顾 全部

科技要闻

第一批小米车主,已经开始卖车了

头条要闻

欧洲杯-皇马19岁天才世界波 土耳其3-1格鲁吉亚

头条要闻

欧洲杯-皇马19岁天才世界波 土耳其3-1格鲁吉亚

体育要闻

对于凯尔特人来说 谁是MVP根本不重要

娱乐要闻

被曝新恋情,张碧晨王琳凯发声辟谣

财经要闻

官方:税务部门没有倒查30年的安排

汽车要闻

全球最低价 现代IONIQ 5N预售价39.88万

态度原创

健康
本地
游戏
旅游
教育

晚餐不吃or吃七分饱,哪种更减肥?

本地新闻

我和我的家乡|在鞍山的每一步都有新发现

黄月英在三国谋定天下真能平替大乔?诸葛亮头顶的草怕是除不掉了

旅游要闻

直航加免签,利好中国—古巴旅游往来

教育要闻

常识题:谁是中山装的创始人?这道题很简单,顾名思义

无障碍浏览 进入关怀版