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系统中通过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版本并验证可能遇到的问题前提:公司常

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

IDEA与JDK、Maven安装配置完整步骤解析

《IDEA与JDK、Maven安装配置完整步骤解析》:本文主要介绍如何安装和配置IDE(IntelliJIDEA),包括IDE的安装步骤、JDK的下载与配置、Maven的安装与配置,以及如何在I... 目录1. IDE安装步骤2.配置操作步骤3. JDK配置下载JDK配置JDK环境变量4. Maven配置下

Java8需要知道的4个函数式接口简单教程

《Java8需要知道的4个函数式接口简单教程》:本文主要介绍Java8中引入的函数式接口,包括Consumer、Supplier、Predicate和Function,以及它们的用法和特点,文中... 目录什么是函数是接口?Consumer接口定义核心特点注意事项常见用法1.基本用法2.结合andThen链

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问