JDK 22 和 JDK 23:到目前为止我们所知道的

2024-03-07 10:20
文章标签 jdk 23 22 知道 目前为止

本文主要是介绍JDK 22 和 JDK 23:到目前为止我们所知道的,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JDK 22 和 JDK 23:到目前为止我们所知道的

Oracle Java 平台组首席架构师Mark Reinhold宣布, JDK 22是自JDK 21以来的第一个非 LTS 版本,现已进入第二个候选版本阶段。主线源代码存储库于 2023 年 12 月中旬(Rampdown 第一阶段)分叉到 JDK稳定存储库,定义了 JDK 22 的功能集。可以解决诸如回归或严重功能问题之类的关键错误,但必须解决这些问题。通过修复请求流程获得批准。根据发布时间表,JDK 22将于2024年3月19日正式发布。

最终的 12 个新功能集(以JEP的形式)可分为四 (4) 类:核心 Java 库Java 语言规范HotSpotJava 工具

其中六 (6) 个新功能属于核心 Java 库

  • JEP 454:外部函数和内存 API
  • JEP 457:类文件 API(预览版)
  • JEP 460:Vector API(第七个孵化器)
  • JEP 461:流收集器(预览)
  • JEP 462:结构化并发(第二预览版)
  • JEP 464:范围值(第二预览版)

其中四 (4) 个新功能属于Java 语言规范

  • JEP 447:super(…) 之前的语句(预览)
  • JEP 456:未命名变量和模式
  • JEP 459:字符串模板(第二次预览)
  • JEP 463:隐式声明的类和实例主要方法(第二预览版)

其中一 (1) 个新功能属于HotSpot类别:

  • JEP 423:G1 的区域固定

最后,其中一 (1) 个新功能被归类为Java 工具

  • JEP 458:启动多文件源代码程序

我们研究了其中一些新功能,并包括它们在四个主要 Java 项目( Amber、Loom、Panama和Valhalla )支持下的位置,这些项目旨在孵化一系列组件,以便通过精心策划的合并最终包含在 JDK 中。

Project Amber

JEP 463,隐式声明的类和实例主方法(第二预览版),以前称为未命名类和实例主方法(预览)灵活的主方法和匿名主类(预览)以及隐式类和增强的主方法(预览),合并了针对上一轮预览的反馈进行了增强,即 JEP 445、未命名类和实例主要方法(预览)。该 JEP 提议“发展 Java 语言,以便学生可以编写他们的第一个程序,而无需了解为大型程序设计的语言功能。” 此功能推进了Oracle Java 语言架构师Brian Goetz于 2022 年 9 月发布的博客文章“铺平入口” 。Oracle 技术顾问成员Gavin Bierman发布了规范文档的初稿,供 Java 社区审查。有关 JEP 445 的更多详细信息可以在 InfoQ新闻报道中找到。

JEP 459,字符串模板(第二次预览),提供了第一轮预览的第二次预览:JEP 430,字符串模板(预览) ,在 JDK 21 中提供。此功能通过字符串模板(包含嵌入的字符串文字)增强了 Java 编程语言表达式,在运行时解释,其中嵌入的表达式被评估和验证。有关 JEP 430 的更多详细信息可以在 InfoQ新闻报道中找到。

JEP 456,未命名变量和模式,建议在上一轮预览之后最终确定此功能:JEP 443,未命名模式和变量(预览) ,在 JDK 21 中提供。此功能将“使用未命名模式增强语言,该模式与记录组件,但不说明组件的名称或类型,以及未命名的变量,可以初始化但不能使用。” 这两者都由下划线字符表示,如**r instanceof _(int x, int y)和中r instanceof _**。

JEP 447,super(…) 之前的语句(预览版)建议:允许不引用正在创建的实例的语句出现在构造函数中的**this()or调用之前;super()**并保留构造函数现有的安全性和初始化保证。Bierman 还提供了此功能的初始规范,供 Java 社区审查并提供反馈。

Project Loom

JEP 464,Scoped Values (Second Preview),以前称为Extent-Local Variables (Incubator),提出了第二次预览,不做任何更改,以便从一轮孵化和一轮预览中获得额外的经验和反馈:JEP 446 ,范围值(预览版),在 JDK 21 中提供;以及 JEP 429,范围值(孵化器),在 JDK 20 中提供。此功能支持在线程内和线程间共享不可变数据。这比线程局部变量更可取,特别是在使用大量虚拟线程时。

JEP 462,结构化并发(第二个预览版),提出第二个预览版,不做任何更改,以便从上一轮预览中获得更多反馈:JEP 453,结构化并发(预览版),在 JDK 21 中提供。此功能简化了并发编程通过引入结构化并发来“将在不同线程中运行的相关任务组视为单个工作单元,从而简化错误处理和取消、提高可靠性并增强可观察性”。

Project Panama

JEP 460,Vector API(第七个孵化器),根据前六轮孵化的反馈进行了增强:JEP 448,Vector API(第六个孵化器),在 JDK 21 中交付;JEP 438,Vector API(第五孵化器),在 JDK 20 中交付;JEP 426,Vector API(第四个孵化器),在 JDK 19 中交付;JEP 417,Vector API(第三孵化器),在 JDK 18 中交付;JEP 414,Vector API(第二孵化器),在 JDK 17 中交付;JEP 338,Vector API(孵化器) ,作为 JDK 16 中的孵化器模块提供。JEP 448 中最显着的变化包括对JVM 编译器接口(JVMCI)的增强,以支持 Vector API 值。

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 中提供。自上一个版本以来的改进包括: 一个新的**Enable-Native-Access清单属性,允许可执行 JAR 中的代码在不使用标志的情况下调用受限制的方法--enable-native-access**;允许客户端以编程方式构建 C 函数描述符,避免特定于平台的常量;改进了对本机内存中可变长度数组的支持;并支持本机字符串中的多个字符集。有关 JEP 454 的更多详细信息可以在 InfoQ新闻报道中找到。

JDK 23

计划于 2024 年 9 月发布 GA,目前只有一个针对JDK 23 的JEP。然而,根据一些 JEP 候选者和草案,特别是那些已经提交的草案,我们可以推测哪些额外的 JEP 有可能包含在 JDK 23 中。

JEP 455,模式中的原始类型、instanceof 和 switch(预览版),已针对JDK 23。该 JEP 在 Amber 项目的支持下,建议通过在所有模式上下文中允许原始类型模式来增强模式匹配,并扩展**instanceofswitch**适用于所有原始类型。Oracle 技术人员主要成员Aggelos Biboudis最近发布了此功能的更新草案规范。

JEP 468,派生记录创建(预览版),已从其JDK 草案 8321133升级为候选状态。该 JEP 建议通过记录的派生创建来增强 Java 语言。由于记录是不可变的对象,因此开发人员经常从旧记录创建新记录来对新数据进行建模。派生创建通过从现有记录派生新记录并仅指定不同的组件来简化代码。

JEP 467(Markdown 文档注释)已从JDK草案8316039提升为候选状态。此功能建议使用 Markdown 编写 JavaDoc 文档注释,而不是混合使用 HTML 和 JavaDoc标签。这将使文档注释以源代码形式更容易编写和阅读。@

JEP 466,类文件 API(第二个预览版),已从JEP草案8324965升级为候选状态。此 JEP 提出第二轮预览,以获得上一轮预览的反馈:JEP 457,类文件 API(预览),将在即将发布的 JDK 22 中提供。此功能提供了用于解析、生成、并转换 Java 类文件。它最初将作为JDK 中ASM(Java 字节码操作和分析框架)的内部替代品,并计划将其作为公共 API 开放。Goetz 将 ASM 描述为“一个带有大量遗留包袱的旧代码库”,并提供了有关该草案将如何发展并最终取代 ASM 的背景信息。

JEP 465(字符串模板)已从JEP草案8323333提升为候选状态。此 JEP 建议在两轮预览后最终确定此功能,即 JEP 459,字符串模板(第二次预览),将在即将发布的 JDK 22 中提供,以及 JEP 430,字符串模板(预览),将在 JDK 21 中提供。此功能通过字符串模板(包含嵌入表达式的字符串文字)增强了 Java 编程语言,这些模板在运行时对嵌入表达式进行求值和验证。有关 JEP 430 的更多详细信息可以在 InfoQ新闻报道中找到。

JEP 401,空限制值对象存储(预览版),以前称为原始类(预览版),在 Valhalla 项目的支持下,引入了开发人员声明的原始类 - 由值对象 API 定义的特殊类型的值类 - 即定义新的原始类型。

Oracle 的 Java 架构师Paul Sandoz提交了JEP 草案 8326878,Vector API(孵化器)。经过从 JDK 16 到 JDK 22 集成的七轮孵化后,此 JEP 建议在 JDK 23 中重新孵化API,相对于 JDK 22 没有 API 更改,也没有实质性的实现更改。此功能将引入一个 API 来“表达向量计算可以在运行时可靠地编译为支持的 CPU 架构上的最佳向量指令,从而实现优于同等标量计算的性能。”

Bierman 和PatientEXP 创始人兼首席执行官Archie Cobbs介绍了JEP 草案 8325803,Flexible Constructor Bodies (Second Preview),这是一个提出第二轮预览并更改名称以获取上一轮预览反馈的 JEP,即 JEP 447,Super(…) 之前的语句(预览版),将在即将发布的 JDK 22 中提供。此功能允许不引用正在创建的实例的语句出现在构造函数中的**this()or调用之前;super()**并保留构造函数现有的安全性和初始化保证。该 JEP 的变化包括: 对本地类的处理;并将在显式构造函数调用之前不能访问字段的限制放宽为在显式构造函数调用之前不能读取字段的要求。Bierman 提供了此 JEP 的初始规范,供 Java 社区审查并提供反馈。

JEP 草案 8307341,准备限制 JNI 的使用,建议限制本质上不安全的 Java 本机接口 (JNI) 的使用以及外部函数和内存 (FFM) API 中受限制方法的使用,该 API 预计将成为JDK 23 中的最后一个功能。从 JDK 23 开始,对齐策略将使 Java 运行时显示有关 JNI 使用的警告,除非 FFM 用户在命令行上启用不安全的本机访问。预计在 JDK 23 之后的版本中,使用 JNI 将抛出异常而不是警告。

JEP 草案 8313278,Java 虚拟机的提前编译,建议“增强 Java 虚拟机,使其能够加载编译为本机代码的 Java 应用程序和库,以实现更快的启动和基线执行”。

JEP 草案 8312611,计算常量(预览版) ,引入了计算常量的概念,定义为最多初始化一次的不可变值持有者。这提供了现场的性能和安全优势**final**,同时在初始化时间方面提供了更大的灵活性。此功能将作为预览API 首次亮相。

JEP 草案 8283227,JDK 源结构,一种信息性 JEP 类型,描述了 JDK 源代码以及 JDK 存储库中相关文件的总体布局和结构。该 JEP 建议帮助开发人员适应 JDK 9 中提供的 JEP 201(模块化源代码)中描述的源代码结构。

JEP 草案 8278252,JDK 打包和安装指南,一个信息性 JEP,建议为在 macOS、Linux 和 Windows 上创建 JDK 安装程序提供指南,以减少不同 JDK 提供商安装 JDK 时发生冲突的风险。目的是通过规范安装目录名称、包名称和其他可能导致冲突的安装程序元素,在安装 JDK 更新版本时提供更好的体验。

我们预计 Oracle 很快就会开始针对 JDK 23 提供更多 JEP。


JDK 22 and JDK 23: What We Know So Far - InfoQ

这篇关于JDK 22 和 JDK 23:到目前为止我们所知道的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/783192

相关文章

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)

《JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)》本文介绍了如何在Windows系统上配置多版本JDK(以JDK8和JDK17为例),并通过图文结合的方式给大家讲解了详细步骤,具有... 目录第一步 下载安装JDK第二步 配置环境变量第三步 切换JDK版本并验证可能遇到的问题前提:公司常