Java 21 的计划将于 9 月到期包括关键封装机制 API 和 32 位 Windows 弃用端口。
Java Development Kit (JDK) 21 将于 9 月作为 Oracle 标准 Java 下一个长期支持版本的发布,现在正式提出 13 最近几天又增加了两个特征。
最新提案包括密钥包装机制 (KEM) API 和弃用 32 位 x86 Windows 端口。本月早些时候,其他三个功能被添加到世代 Shenandoah 垃圾收集器、未命名类别和实例的主要方法,以及未命名的模式和变量。
加入了这五个提案 3 月和 4 每月提出的八个功能:分代 ZGC(Z 垃圾收集器)、记录模式、表达式和句子匹配模式switch
、矢量 API、序列集合、虚拟线程、字符串模板预览、第三个外部函数和内存 API 预览。此外,,JDK 21 还将更改网络名称的分配 Windows 网络接口的方式。
GPL 可以获得以下早期访问二进制文件。甲骨文每六个月发布一次标准 Java 新版本,最新版本已经在了 3 月 21 日常发布。目前 JDK 21 具体提案包括:
- ,通过公共密码保护对称密钥的加密技术。该提案的目标之一是使用应用程序 KEM 算法,例如 RSA 密钥包装机制 (RSA-KEM)、椭圆曲线集成加密方案 (ECIES) 美国国家标准与技术研究所 (NIST) 量子密码标准化过程后的候选算法。另一个目标是达成更高层次的协议(例如传输层的安全性) (TLS))加密方案(如混合公钥加密) (HPKE))中启用 KEM。此外,安全提供商将能够 Java 本机代码或本机代码的实施 KEM 算法,包括在中定义 Diffie-Hellman KEM (DHKEM) 的实施。
- 用于删除的弃用 Windows 32 位 x86 端口的目的是在未来版本中删除它。为了尝试,该提案旨在更新构建系统 Windows 32 位 x86 构建配置时发出错误信息。通过新的配置选项,该消息将被抑制。另外,计划将端口及相关端口的具体功能标记为已弃用,以便在相关文件中删除。该提案指出,Windows 10 是最后的支持 32 位操作的 Windows 其生命周期将在操作系统中进行 2025 年 10 月结束。
- Generational Shenandoah, Shenandoa GC 为了提高可持续吞吐量、负载峰值弹性和内存利用率,该提案具有实验性的生成收集功能。该提案的主要目标是不破坏非分代 Shenandoah 为了使分代模式成为未来版本中的默认模式,提供实验性分代模式。其他目标包括不牺牲低 GC 减少持续内存占用,减少暂停情况下的持续内存占用 CPU 使用电源,保持高吞吐量,并继续支持压缩对象指针。该提案最初将得到支持 x64 和 随着实验模式的推进,AArch64将增加对其他指令集的支持。取代非分代 Shenandoah 不是目标,它将继续作为默认操作模式,其性能或功能不会退化。
- 预览未命名类别和实例的主要方法,以改进语言,使学生能够编写他们的第一个 Java 没有必要理解大型程序设计的语言功能。学生不需要使用单独的语言功能 Java 方言可以为单类程序编写简化声明,然后随着技能的增长无缝扩展程序,使用更先进的功能。目的是 Java 提供一个平滑的入口。
- 预览未命名模式和变量,使用未命名模式和未命名变量来增强语言。未命名模式与记录组件匹配,不声明组件的名称或类型,未命名的变量可以初始化,但不能使用。两者都使用下划线字符 . 表示_。该提案旨在通过消除不必要的嵌套模式来提高记录模式的可读性,并通过识别必须声明但不使用的变量来提高所有代码的可维护性。
- Generational ZGC旨在通过扩展 ZGC 提高应用程序的性能,以维护新旧对象的不同代。年轻的对象往往会早逝,保持不同的一代会使他们早逝 ZGC 更频繁地收集它们。使用分代 ZGC 操作应用程序应看到以下好处:降低分配停顿的风险,降低堆内存成本,减少垃圾收集 CPU 开销降低。与非分代 ZGC 这些好处不应显著减少吞吐量。
- 在JDK 19和JDK 20预览的记录模式将解构记录值。可嵌套记录模式和类型模式,实现强大的、声明的、可组合的数据导航和处理形式。该提案的目标包括扩展模式匹配,解构记录实例,并添加嵌套模式,以实现更多可组合的数据查询。此功能与 switch 共同发展的模式匹配。当前 JEP(JDK 建议根据持续的经验和反馈,进一步完善增强提案中的记录模式。除了较小的编辑变更外,自第二次预览以来的主要变更是删除对增强标题中记录模式的支持for声明。这个功能在未来可能会出现 JEP 中重新提出。
- 模式匹配 forswitch使一个switch表达式或句子能够测试多个模式,每个模式都有特定的操作,因此可以安全简洁地表达复杂的面向数据查询。这个功能最初是JDKK 17中提出的,随后在JDK 18、JDK 19 和 JDK 完善20中。它将在 JDK 21 根据反馈和经验,最终确定并进一步改进。与以前的 JEP 相比之下,主要的变化是删除括号模式并允许有限的枚举常量,例如
switch
表达式和句子 case 常量。目标包括扩大表达能力和适用性switch
出现在允许模式下 case 标签允许在必要时放宽历史 null-hostility ,所有潜在的输入值都被要求的模式语句覆盖switch
以提高句子的安全性来表达和句子。另一个目标是确保现有的表达式和句子在不改变的情况下继续编译,并以相同的语义执行。switch
switch
switch
- 向量 API的第六个孵化器用于表达向量计算,并在运行过程中可靠地编译为支持 CPU 架构上的最佳向量指令优于等效标量计算。JDK已经在这之前了 16到 JDK 20 中孵化。最新版本包括性能增强和错误修复。该提案的目标包括与平台无关的清晰和简洁,以及 x64 和 AArch64 在运行过程中提供可靠的编译和性能。其他目标包括优雅降级,当向量计算在运行过程中不能完全表示为向量指令序列时,以及与Project Valhalla对齐。
- 外部函数和内存 API使 Java 程序能够与 Java 操作过程中以外的代码和数据进行互操作。该预览有效地调用外部函数,并安全地访问外部内存 API 使 Java 该程序可以在没有本地数据的情况下调用本地库并处理本地数据 JNI(Java Native Interface)脆弱性和危险性。该 API JDK上个月首次亮相 20和 2022 年 9 JDK月发布 预览在19中进行。最新预览版的改进包括增强布局取消引用地址布局的路径和新元素,集中管理本机生命周期界面中的段Arena、实现后备本机链接器,删除Valist.该提案的目标包括易用性、性能、通用性和安全性。在这里 API 以上重新实现 JNI 或以任何方式进行更改 JNI 都不是目标。
- 虚拟线程是一个轻量级线程,预计将显著减少编写、维护和观察高吞吐量并发应用程序的工作量。该计划的目标包括以接近最佳硬件利用率的简单方式编写的服务器应用程序,并使用每个请求一个线程 API 现有代码可以最小化虚拟线程,使虚拟线程的调试和分析成为lang.目前,Thread易于使用 JDK 工具的线程。在JDK之前 20和JDK 预览将在19中进行,虚拟线程将进行 JDK 21 中完成。随着 JDK 21.虚拟线程现在支持线程局部变量的所有时间,不可能创建没有这些变量的虚拟线程。保证对线程局部变量的支持,确保更多的现有库可以在虚拟线程中使用,而无需更改,并有助于将面向任务的代码迁移到使用虚拟线程中。
- 序列化集合引入界面,表示有定义的遇到顺序集合。每一集都有明确定义的第一个和第二个元素,等等,直到最后一个元素。提供统一 API 接受第一个和最后一个元素,并以相反的顺序处理元素。刺激提案的是 Java 在集合框架的情况下,缺乏一种集合类型来表示具有定义满足顺序的元素序列。它还缺乏适合这些集合的统一操作集。这些差距一直是投诉的问题和来源。该提案要求定义用于集合、集合和映射排序的界面,并将其改装成现有的集合类型层次结构。默认实现了所有这些新方法。
- 字符串模板作为预览功能出现,通过将文本与嵌入式表达式和处理器相结合,产生特殊结果,从而补充 Java 现有字符串文本和文本块。这种语言功能和 API 旨在通过简化 Java 编写程序使表达包含运行计算值的字符串更容易。它承诺提高表达式的可读性,提高程序的安全性,保持灵活性,简化接受以非 Java 用语言编写的字符串 API 的使用。从组合文本和嵌入式表达式衍生的非字符串表达式的发展也是一个目标。
根据Oracle 的 Java 除了团队的说法,除了这些 JEP 之外,JDK Windows分配给Windows 网络接口的网络名称将在 JDK 21 变化发生在中间。建议多播网络或使用API。 应用程序的维护人员应注意这一变化。java.net.NetworkInterface
JDK 过去曾为 Windows 网络接口合成名称。这已经改为使用 Windows 操作系统分配的名称。此更改可能会影响使用该方法查找网络接口的代码NetworkInterface.GgetbyName(String-name)
。
JDK 21 拟议发布时间表包括发生在 6 月 8 日和 7 月 20 日斜坡下降阶段。功能集在第一个斜坡下降阶段被冻结,错误修复仍在继续。然后是 8 月 10 日和 8 月 24 在日本的初始和最终候选版本中,仍然有可能修复错误,然后是 9 月 19 日全面上市。
作为长期支持(LTS)版本,JDK 21 Premier将获得五年 直到支持和延长支持,支持和延长支持 2031 年 9 月。当前的 LTS 版本是JDK 17,发布于 2021 年 9 月。非 LTS JDK等版本 20和JDK 19.只有六个月的主要支持,没有扩展支持。
JDK 21 还可以添加许多其他潜在功能。其中之一是在线程和线程之间共享不可变数据的功能域值预览。此功能在 JDK 20 孵化。第二种可能性是毕业结构化并发性,这是一个简化错误处理和提高可靠性的提案,以预测状态。此功能以前已经存在过 JDK 19 和 JDK 20 中孵化。
第三种可能性是准备禁止动态加载代理。当代理被动态加载到正在运行中时 JVM 中时,此功能将发出警告,为未来默认不允许加载动态代理的版本做准备。最后,JDK 21 第四个潜在功能是实验性紧凑对象标头功能,旨在减少 JVM 为了减少堆叠的大小,中对象标头的大小。