写点什么

Java 23 发布,提供了 Markdown 文档、ZGC 分代模式并废弃 sun.misc.Unsafe

  • 2024-09-26
    北京
  • 本文字数:3973 字

    阅读完需:约 13 分钟

Java 23发布,提供了Markdown文档、ZGC分代模式并废弃sun.misc.Unsafe

甲骨文 发布了 Java 编程语言和虚拟机的 23 版本。作为 JDK 21 之后的第一个非 LTS 版本,最终的 12 个 JEP 特性包括:


  • JEP 455:模式、instanceof 和 switch 中的原始类型(Primitive Types in Patterns, instanceof, and switch,预览)

  • JEP 466:类文件 API(Class-File API,第二轮预览)

  • JEP 467:Markdown 文档注释(Markdown Documentation Comments)

  • JEP 469:Vector API(第八轮孵化)

  • JEP 471:废弃 sun.misc.Unsafe 中的内存访问方法以便于将其移除(Deprecate the Memory-Access Methods in sun.misc.Unsafe for Removal)

  • JEP 473:流收集器(Stream Gatherers,第二轮预览)

  • JEP 474:ZGC:默认的分代模式(ZGC: Generational Mode by Default)

  • JEP 476:模块导入声明(Module Import Declarations,预览)

  • JEP 477:隐式声明的类和实例主方法(Implicitly Declared Classes and Instance Main Methods,第三轮预览)

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

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

  • JEP 482:灵活的构造函数体(: Flexible Constructor Bodies,第二轮预览)


其中的三项特性(Markdown 文档注释、ZGC:默认的分代模式以及废弃sun.misc.Unsafe中的内存访问方法以便于将其移除)是非经预览流程的最终特性。


如下图所示,正如该博客文章所述,从交付的特性数量上来看,JDK 23 与四年前 JDK 14 之后的其他版本差不多,只不过 JDK 18、JDK 19 和 JDK 20 与这些版本有一定的差异。



在本文中,我们将会详细介绍其中的一些 JEP,讨论 JDK 23 的发布会,并更新对 JDK 24 可能会包含的特性的预测。


Markdown 文档注释


JEP 467,Markdown 文档注释,建议使用 Markdown(一种流行的标记语言,常见于开源项目中)编写 JavaDoc 文档注释,取代 HTML 和 JavaDoc @标记的混合体。它的目的是提供更易于阅读和编写的改进文档。


ZGC:默认的分代模式


JEP 474,ZGC:默认的分代模式,建议将 Z 垃圾收集器(ZGC)从默认使用非分代模式切换为分代模式。非分代模式将会废弃,并在未来的 JDK 版本中移除。这最终会降低维护这两种模式的成本,未来的开发工作主要集中在 JEP 439,分代式 ZGC 上。关于这方面的详细信息,请参阅 InfoQ 的 新闻。


废弃 sun.misc.Unsafe 中的内存访问方法以便于将其移除


JEP 471,废弃 sun.misc.Unsafe 中的内存访问方法以便于将其移除,建议废弃Unsafe中的内存访问方法,以便在未来的 JDK 版本中将其移除。这些方法已经被其他的 JDK 特性所取代,比如 JDK 9 交付的 JEP 193,变量句柄(Variable Handles) 以及 JDK 22 所交付的 JEP 454,外部函数与内存 API(Foreign Function & Memory API)。


流收集器(第二轮预览)


JEP 473,流收集器(第二轮预览),建议在上一轮(即 JDK 22 交付的 JEP 461, 流收集器(预览))的基础上进行第二次预览。与 JEP 461 相比,它没有面向用户的改动,这会有更多的时间获取关于该特性的反馈和用户使用体验。该特性的目的是增强 Stream API,以支持自定义的中间操作,从而“允许流管道以现有内置中间操作难以实现的方式转换数据”。关于该 JEP 的更多详情,请参阅原始设计文档和 InfoQ 的新闻报道。


类文件 API(第二轮预览)


JEP 466,类文件 API(第二轮预览),建议进行第二轮预览,以获取上一轮预览的反馈,即 JDK 22 交付的 JEP 457,类文件 API(预览)。该特性提供了用于解析和生成 Java 类文件的 API,以改进转换过程。它最初的目的是作为 JDK 中 ASM(Java 字节码操作和分析框架)的内部替代方案,并计划将其作为公开 API 对外发布。甲骨文公司的 Java 语言架构师 Brian Goetz 认为 ASM 是“带有大量遗留问题的旧代码库”,并提供了该草案如何发展并最终取代 ASM 的背景信息。


JDK 23 发布会


JDK 23 发布会在 2024 年 9 月 17 日的 13:00 至 16:30 UTC 进行了直播,发布会由甲骨文的 Java 开发人员倡导者 Ana-Maria Mihalceanu、Billy Korando 和 Nicolai Parlog 主持,主要讨论的话题包括 Java 23 新特性的深入介绍、Java 在 2024 年的外联活动以及 Java 的预览特性和未来工作。发布会的特邀嘉宾包括:


  • 甲骨文的技术顾问 Gavin Bierman 讨论了 Amber 项目 和 JDK 23 中的四个 JEP,即灵活的构造函数体(第二轮预览)、隐式声明的类和实例主方法(第三轮预览)、模块导入声明(预览)以及模式、instanceof 和 switch 中的原始类型(预览)。他还说明了至少目前取消 字符串模板(String Templates)API 的原因,该 API 原计划在 JDK 24 发布时完成。

  • 甲骨文公司 Loom 项目的架构师兼技术负责人 Ron Pressler 介绍了 JEP Draft 8305968,默认完整性(Integrity by Default),这是一项新特性,建议“限制 Java 平台中的不安全 API,以便在默认情况下库、框架和工具无法使用它们。应用程序作者将能够覆盖这一默认值”。

  • 甲骨文的软件工程师 Maurizio Cimadamore 讨论了外部函数与内存(FFM)API 的改进,该功能已在 JDK 22 中确定。这些改进包括,在 FFM 中使用 ByteBuffer类的限制、MemorySegment接口以及 JStruct(一个简单的jextract插件,可生成给定头文件中的所有结构布局)。

  • 甲骨文的首席技术成员 Jonathan Gibbons 讨论了新的 Markdown 文档注释 API 背后的动机、使用方法以及开发人员未来可期待的功能。

  • 甲骨文的高级经理 Stefan Karlson 讨论了 ZGC:默认的分代模式 API 中的新特性,以及为什么开发人员应该迁移到该特性而不是只有一个代的垃圾收集器。

  • 甲骨文的首席软件开发工程师 Denys Makogon 介绍了 Java Playground 的更新情况,这是一个基于 JShell 工具的图形用户界面,用于编写和执行 Java 代码。

  • 甲骨文的高级总监兼 Java 教育负责人 Heather Stephens 讨论了 2020 年 6 月启动的 Java 教育(Java in Education) 计划的重要性,该计划旨在为教育机构提供更好的资源,使其能够不再局限于 JDK 8 的教学。关于该计划的更多详情,请参阅本篇 InfoQ 新闻报道。

  • 甲骨文的产品管理与开发人员参与的高级总监 Sharat Chander 和甲骨文的软件项目管理 Jim Grisanzio 提供了 Java 社的区报告,内容包括 Java 用户组的认可、热门会议以及 Sip of Java、JEP Cafe 和 Inside Java Newscast 系列的概述。Chander 还提醒与会者,JavaOne 将于 2025 年再次 举办,以庆祝 Java 的 30 岁生日。议题征集截止 2024 年 10 月 10 日 17:00 PDT。

  • 甲骨文实验室的首席开发人员倡导者 Alina Yurenko 和甲骨文实验室 GraalVM 团队研究经理 Fabio Niephaus 简要介绍了与 JDK 23 同时发布的 GraalVM for JDK 23。除了新功能外,GraalVM 还宣布 GraalPy 不再是实验性的。Niephaus 演示了使用 GraalPy 和 GraalWasm 的应用程序。

  • Brian Goetz 讨论了类文件 API,以及甲骨文为什么要提供用于处理 Java 类文件的 API。根据用户的反馈意见,甲骨文对该 API 进行了修改,Goetz 希望该功能能在 JDK 24 中最终完成。有关类文件 API 的更多详情,请参阅 YouTube 视频。

  • 甲骨文的 JVM 架构师 John Rose 提供了 Leyden 项目 的最新信息,该项目旨在改进“Java 程序的启动时间、峰值时间性能和占用空间”。


JDK 23 现在可以从甲骨文的网站下载,其他供应商的二进制文件预计将在未来几天内推出。


JDK 24


JDK 24 计划于 2025 年 3 月发布 GA 版本,目前只有一个针对 JDK 24 的 JDK 24。然而,根据一些 JEP 候选和草案,特别是那些已经提交的草案,我们可以推测出 JDK 24 可能还会包含的 JEP。


JEP 472,准备限制对 JNI 的使用(Prepare to Restrict the Use of JNI),已经被定为 JDK 24 的 目标。该 JEP 建议限制与 JDK 22 中所提供的外部函数和内存(Foreign Function & Memory,FFM)API 中的受限方法 一起使用 本质上不安全的 Java 本地接口(Java Native Interface,JNI)。从 JDK 23 开始,如果 FFM 用户未在命令行上启用不安全的本地访问,对齐策略将使 Java 运行时显示关于使用 JNI 的警告。预计在 JDK 23 之后的版本中,使用 JNI 将抛出异常而不是警告。更多详细信息可参阅 InfoQ 的 新闻报道。


JEP 484,类文件 API,目前处于候选状态,建议经过两轮预览(即 JDK 23 交付的 JEP 466, 类文件 API(第二轮预览) 和 JDK 22 交付的 JEP 457, 类文件 API(预览))后在 JDK 24 中最终确定该特性。第二次预览版之后的 变更 包括:AnnotationValue.OfConstant接口中定义了一个新方法resolvedValue(),以及一些方法的重命名、从某个接口转移至另一个接口或移除。


JEP Draft 8338456,作用域值(第四次预览),建议进行第四次预览,并做了一处修改,以便从之前的一轮孵化和三轮预览中获得更多经验和反馈,即 JDK 23 交付的 JEP 481, 作用域值(第三次预览)、JDK 22 交付的 JEP 464, 作用域值(第二次预览)、JDK 21 交付的 JEP 446, 作用域值(第二次预览) 和 JDK 20 交付的 JEP 429, 作用域值(孵化)。该特性以前称为“扩展局部变量(孵化)”,可在线程内和线程间共享不可变数据。与线程局部变量相比,该功能更值得推荐使用,尤其是在使用大量虚拟线程的时候。


JEP Draft 8300911,PEM API(预览),引入了一个简单直观的 API,用于编码和解码 隐私增强邮件(Privacy-Enhanced Mail)(PEM)格式,以描述最多只能更改一次的值持有者。这种 PEM 格式将用于存储和发送加密密钥和证书。


JEP Draft 8291976, 在 HttpClient 中支持 HTTP/3, 建议更新 JDK 11 中的 JEP 321,HTTP Client,以支持 HTTP/3 协议。这将允许应用程序和库能够与 HTTP/3 服务器进行交互,并以最小的代码改动获得 HTTP/3 的收益。


JDK 24 的正式发布日期预计为 2025 年 3 月,甲骨文公司 Java Platform Group 首席架构师 Mark Reinhold 不久将会发布这一提议。预计特性将于 2024 年 12 月初冻结。有关其他 JEP 草案和候选版本的更多详细信息,请参阅 InfoQ 的 新闻报道。


原文链接:

https://www.infoq.com/news/2024/09/java23-released/

2024-09-26 09:192

评论

发布
暂无评论

Java 是否应该使用通配符导入( wildcard imports)

HoneyMoose

SAP 人工智能解决方案的演进史 - 从 SAP Leonardo 到 SAP Data Intelligence

汪子熙

人工智能 机器学习 AI SAP 8月月更

LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之三:两次优化

程序员欣宸

Java LeetCode 8月月更

关于技术学习的6个观点

郭明

技术人

仿钉钉审批流程后端 PHP 处理(一)

CRMEB

《The Google File System》新说

Joseph295

架构实战营模块三作业

zhihai.tu

Jina 实例秀|七夕神器!比你更懂你女友的口红AI

Jina AI

七夕 神经网络架构搜索

《迁移学习导论》第2版,升级内容抢先看!

博文视点Broadview

8月总结高频vue面试题

helloworld1024fd

Vue

IDEA 自动导入的配置(Auto import)

HoneyMoose

一文带你了解 Java 中的构造器

踏雪痕

Java 构造函数 8月月更

带你造轮子,自定义一个随意拖拽可吸边的悬浮View组件

yechaoa

android 开源 签约计划第三季 8月月更

Rust 入门指南 (用 WASM 开发第一个 Web 页面)

王泰

rust Wasm WebAssenbly ​Rust

语音社交app源码——具备哪些开发优势?

开源直播系统源码

软件开发 语聊房 直播系统源码 语音聊天系统 语音聊天app

华为开源:聚焦开源基础软件,共建健康繁荣生态

科技热闻

mysql进阶(二十六)MySQL 索引类型

No Silver Bullet

MySQL MySQL索引 8月月更

STM32+SIM800C采用MQTT协议登录OneNet上传温湿度、MQ2烟雾浓度、GPS数据

DS小龙哥

8月月更

第1章:初识数据库与MySQL----MySQL安装

乌龟哥哥

8月月更

《福格行为模型》:如何养成好习惯?

郭明

读书笔记

CentOS6搭建nginx+uwsgi+flask

haiger13

签约计划第三季

浅聊偏函数

掘金安东尼

JavaScript 函数式 8月月更

React的理念与V16的架构变化

郭明

React

开源一夏 | 查询分页不只有limit,这四种分页方法值得掌握

知识浅谈

开源 8月月更

MySQL之my.cnf配置文件

TimeFriends

8月月更

Jina 实例秀|基于神经搜索的网络安全威胁检测(一)

Jina AI

神经网络架构搜索 Python.

C#/VB.NET:在 Word 中设置文本对齐方式

Geek_249eec

C# word VB.NET 文本对齐

开源一夏|ArkUI如何自定义弹窗(eTS)

坚果

开源 HarmonyOS OpenHarmony 8月月更

转转测试环境的标签域名实践

转转技术团队

nginx hosts

免费的公共WiFi不要乱连,遭中间人攻击了吧?

wljslmz

网络安全 签约计划第三季 8月月更 中间人攻击

再次搞定 Ali 云函数计算 FC

小鑫同学

签约计划第三季

Java 23发布,提供了Markdown文档、ZGC分代模式并废弃sun.misc.Unsafe_编程语言_Michael Redlich_InfoQ精选文章