前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >最新Java JDK 21:全面解析与新特性探讨

最新Java JDK 21:全面解析与新特性探讨

作者头像
猫头虎
发布2024-04-09 16:08:48
8290
发布2024-04-09 16:08:48
举报

最新Java JDK 21:全面解析与新特性探讨

JDK 21 的生产版本是在 6 月份的缩减和候选版本阶段之后发布的。作为长期支持版本,JDK 21 将获得五年的首要支持和扩展支持,直至 2031 年 9 月。之前的 LTS 版本是JDK 17,于 2021 年 9 月发布。非 LTS 版本,例如JDK 20JDK 19,仅获得六个月的首要支持,并且没有扩展支持。LTS 版本每两年发布一次。

摘要:

? 猫头虎博主来啦!本文将深入探讨Java JDK 21的新特性、更新和其在软件开发中的重要性。想了解JDK 21为何受到如此关注?本文为您提供答案! Java, JDK 21, 新特性, 软件开发。

引言:

随着技术的不断进步,Java也在持续迭代和完善。JDK 21,作为Java的最新长期支持版本,无疑为Java生态带来了许多值得期待的更新。在本文中,我们将详细探讨这些更新,以及它们如何影响Java的发展方向。

正文:

Java 开发工具包(JDK) 21 是 Oracle 标准 Java 实现的最新长期支持 (LTS) 版本,现已推出生产版本。基于最新版本的 Java SE(标准版)平台 Java 21,JDK 21 迎来了 15 个特性,包括关键的封装机制API、虚拟线程以及字符串模板和结构化并发的预览。拟议的第 16 个功能,即实验性Shenandoah 垃圾收集器于 6 月被放弃

JDK 21 可以从Oracle.com访问,并获得 Oracle 的支持。Oracle 将支持 JDK 21 至少八年。该公司还宣布,对五年前发布的Java 11的长期支持已延长至 2032 年 1 月。

Oracle 每六个月发布一次标准 Java 的新版本。上一个版本JDK 20于 3 月 21 日发布。长期版本每两年发布一次,其间穿插着由六个月支持的短期版本。

JDK 21 的 15 个特性包括:

? 结构化并发

(https://openjdk.org/jeps/453)在预览阶段通过结构化并发 API 简化了并发编程,将在不同线程中运行的相关任务组视为单个工作单元。这简化了错误处理和取消,提高了可靠性并增强了可观察性。结构化并发之前在JDK 20JDK 19中孵化,分别于 2022 年 3 月和 2022 年 9 月发布;它将作为java.util.concurrent包中的预览 API。这次唯一显着的变化是该StructuredTaskScope::Fork(…)方法返回 a[Subtask]而不是 a Future结构化并发的目标包括推广一种并发编程风格,可以消除因取消和关闭而产生的常见风险,例如线程泄漏和取消延迟,以及提高并发代码的可观察性。

? 范围值

(https://openjdk.org/jeps/446)(也在预览版中)将支持在线程内和线程间共享不可变数据。它们优于线程局部变量,特别是在使用大量虚拟线程时。线程局部变量具有设计缺陷,包括无约束的可变性、无限制的生命周期和昂贵的继承。作用域值允许在大型程序中的组件之间安全地共享数据,而无需求助于方法参数。该提案是在 JDK 20 中孵化的。该计划的目标包括易用性、可理解性、稳健性和性能。

? 禁止动态加载代理的

  • 一项准备禁止动态加载代理的提议要求在代理动态加载到正在运行的 JVM 中时发出警告。这些警告旨在为默认情况下不允许动态加载代理的未来版本做好准备,以提高默认情况下的完整性。该提案的其他目标包括重新评估可服务性(涉及对运行代码的临时更改)和完整性(假设运行代码不会任意更改)之间的平衡,并确保大多数不需要动态加载代理的工具,不受影响。该计划还要求将动态加载代理的能力与深度反射等其他所谓的“超级能力”能力结合起来。代理是一个可以在应用程序运行时更改应用程序代码的组件;这些是 2004 年 JDK 5 中的 Java 平台分析架构引入的,作为工具(特别是分析器)检测类的一种方式。虽然代理在设计时考虑到了良性工具,但高级开发人员发现了用例,例如面向方面的编程,以任意方式改变应用程序行为。也没有什么可以阻止代理更改应用程序外部的代码,例如 JDK 本身中的代码。JDK 5 要求在命令行上指定代理,以确保应用程序所有者批准使用代理。在 JDK 21 中,计划要求动态加载代理必须得到应用程序所有者的批准,就像代理启动时加载所要求的那样。此更改将使 Java 平台更接近默认完整性。计划要求要求应用程序所有者批准动态加载代理,就像代理启动时加载所要求的那样。此更改将使 Java 平台更接近默认完整性。计划要求要求应用程序所有者批准动态加载代理,就像代理启动时加载所要求的那样。此更改将使 Java 平台更接近默认完整性。

? 用于密钥封装机制的 API

(https://openjdk.org/jeps/452),一种通过公共密码学保护对称密钥的加密技术。该提案的目标之一是使应用程序能够使用 KEM 算法,例如 RSA 密钥封装机制 (RSA-KEM)、椭圆曲线集成加密方案 (ECIES) 以及美国国家标准与技术研究所 (NIST) 的候选算法后量子密码学标准化过程。另一个目标是允许在传输层安全 (TLS) 等更高级别协议和混合公钥加密 (HPKE) 等加密方案中使用 KEM。安全提供商将能够以 Java 代码或本机代码实现 KEM 算法,并包括RFC 9180中定义的 Diffie-Hellman KEM (DHKEM) 的实现。

? 弃用 Windows 32 位 x86 端口以进行删除

(https://openjdk.org/jeps/449),目标是在未来版本中删除该端口。该提案旨在更新构建系统,以便在尝试配置 Windows 32 位 x86 的构建时发出错误消息。该消息将通过新的配置选项被抑制。此外,计划还将端口和相关端口特定功能标记为已弃用并在相关文档中删除。该提案指出,最后一个支持 32 位操作的 Windows 操作系统 Windows 10 将于 2025 年 10 月结束生命周期。

? 未命名类和实例主要方法

(https://openjdk.org/jeps/445)的预览,以发展 Java 语言,以便学生能够编写第一个 Java 程序,而无需了解为大型程序设计的语言功能。学生无需使用单独的 Java 方言,而是可以为单类程序编写简化的声明,然后随着技能的增长无缝扩展程序以使用更高级的功能。该提案不仅为 Java 提供了一个平滑的入门通道,而且还减少了编写简单 Java 程序(例如脚本和命令行实用程序)所涉及的仪式。

? 未命名模式和变量

(https://openjdk.org/jeps/443)的预览。未命名模式匹配记录组件,而不声明组件的名称或类型,而未命名变量可以初始化但不能使用。两者都由下划线字符 表示_。该提案旨在通过消除不必要的嵌套模式来提高记录模式的可读性,并通过识别必须声明但不会使用的变量来提高所有代码的可维护性。

? 分代 ZGC

(https://openjdk.org/jeps/439)旨在通过扩展 ZGC 来为新对象和旧对象维护不同的代,从而提高应用程序性能。年轻的物体往往会早逝;维护不同的代将允许 ZGC 更频繁地收集年轻对象。使用分代 ZGC 运行的应用程序应该具有以下优势:分配停顿的风险较低,所需的堆内存开销较低,并且垃圾收集 CPU 开销较低。与非分代 ZGC 相比,这些好处应该是可以实现的,而不会显着降低吞吐量。

? 记录模式

(https://openjdk.org/jeps/440)JDK 19JDK 20中预览,将解构记录值。记录模式和类型模式可以嵌套,以实现强大的、声明性的、可组合形式的数据导航和处理。该提案的目标包括扩展模式匹配以解构记录类的实例并添加嵌套模式,从而实现更多可组合的数据查询。此功能与 switch 表达式和语句的模式匹配共同发展(见下文)。当前 JEP(JDK 增强提案)中的记录模式提案将根据持续的经验和反馈进一步完善该功能,最终确定该功能。除了较小的编辑更改之外,自第二次预览以来的主要更改是删除对增强for语句标题中出现的记录模式的支持。该功能可能会在未来的 JEP 中重新提出。

? switch 的模式匹配

(https://openjdk.org/jeps/433)使switch表达式或语句能够针对多种模式进行测试,每个模式都有一个特定的操作,以便可以安全、简洁地表达复杂的面向数据的查询。该功能最初是在JDK 17中提出的,随后在JDK 18JDK 19JDK 20中进行了完善。它将在 JDK 21 中最终确定,并根据反馈和经验进一步完善。与以前的 JEP 相比,主要变化是删除了括号模式并允许限定枚举常量,例如带有switch表达式和语句的 case 常量。目标包括扩大表达能力和适用性switch表达式和语句,允许模式出现在 case 标签中,允许在需要时放松历史的空敌意,并通过要求模式语句覆盖所有潜在的输入值switch来提高语句的安全性。另一个目标是确保现有表达式和语句继续编译而不进行任何更改并以相同的语义执行。switch``switch``switch

? 矢量 API

(https://openjdk.org/jeps/448)的第六个孵化器。该 API 表达的向量计算可以在支持的 CPU 架构上可靠地编译为最佳向量指令,从而实现优于同等标量计算的性能。矢量 API 之前是在JDK 16JDK 20中孵化的。这个最新版本包括性能增强和错误修复。该提案的目标包括清晰简洁、平台无关以及在 x64 和 AArch64 架构上提供可靠的运行时编译和性能。其他目标包括当向量计算无法完全表达为向量指令序列时的优雅降级。

? 外部函数和内存 API

(https://openjdk.org/jeps/442)的第三个预览版,它使 Java 程序能够与 Java 运行时之外的代码和数据进行互操作。通过高效地调用外部函数并安全地访问外部内存,该 API 使 Java 程序能够调用本机库并处理本机数据,而没有 JNI(Java 本机接口)的脆弱性和危险性。该 API 之前已在JDK 20JDK 19中预览。JDK 21 预览版中的改进包括增强的布局路径,其中包含用于取消引用地址布局的新元素、界面中本机段生命周期的集中管理Arena、后备本机链接器实现以及删除VaList。该提案的目标包括易用性、性能、通用性和安全性。在此 API 之上重新实现 JNI 或以任何方式更改 JNI 都不是目标。

? 虚拟线程

(https://openjdk.org/jeps/444)是轻量级线程,有望显着减少编写、维护和观察高吞吐量并发应用程序的工作量。该计划的目标包括使以简单的按请求线程方式编写的服务器应用程序能够以接近最佳的硬件利用率进行扩展,使使用 API 的现有代码能够以最小的更改采用虚拟线程,并能够轻松调试和分析虚拟线程lang.Thread。使用当前 JDK 工具的线程。之前在JDK 20JDK 19中预览过,虚拟线程将在 JDK 21 中最终确定。在 JDK 21 中,虚拟线程现在支持线程局部变量一直如此,并且无法创建没有这些变量的虚拟线程。对线程局部变量的有保证的支持确保更多现有库可以在虚拟线程中不加修改地使用,并有助于迁移面向任务的代码以使用虚拟线程。

? 集合

  • 排序集合提案引入了接口来表示具有定义的遇到顺序的集合。每个集合都有明确定义的第一个和第二个元素,依此类推,直到最后一个元素。提供统一的 API 用于接受第一个和最后一个元素并按相反顺序处理元素。激发该提案的原因是 Java 的集合框架缺乏集合类型来表示具有定义的遇到顺序的元素序列。它还缺乏适用于这些集合的统一操作集。这些差距一直是一个问题,也是投诉的根源。该提案要求定义用于对集合、集合和映射进行排序的接口,并将这些接口改造到现有的集合类型层次结构中。所有这些新方法都有默认实现。

? 字符串模板

(https://openjdk.org/jeps/430)是JDK 21 中的预览功能,它通过将文字文本与嵌入式表达式和处理器耦合来生成专门的结果,从而补充 Java 现有的字符串文字和文本块。此语言功能和 API 旨在通过轻松表达包含运行时计算值的字符串来简化 Java 程序的编写。它承诺增强表达式的可读性、提高程序安全性、保持灵活性并简化接受非 Java 语言编写的字符串的 API 的使用。实现通过结合文字文本和嵌入表达式而派生的非字符串表达式的开发也是一个目标。

?结论

许多 Java 21 功能来自主要的、“命名的”Java 开发项目。虚拟线程、作用域值和结构化并发源自Project Loom,这是一个专注于并发的项目。字符串模板、记录模式、开关模式匹配、未命名模式和变量以及未命名类和实例主方法来自Project Amber,该项目孵化了较小的 Java 生产力功能。Java 21 中引入了外部函数、内存 API 和向量 API 该项目旨在连接 Java 和本机代码。

Oracle 于 9 月 19 日宣布,现在将接受社区对Dev.java 的贡献,其中包含来自 Oracle 团队的教程。整个社区可以通过 GitHub 做出贡献。Oracle 还在 Dev.java 上推出了 Java Playground,这是一个 REPL(读取、提取、打印循环),允许开发人员尝试 Java 21 的功能。

? 未来展望

随着Java JDK 21的发布,Java生态系统继续蓬勃发展。结构化并发、范围值、字符串模板等新特性都显示出Java对现代编程需求的关注。预计在未来的版本中,Java将进一步强化其并发编程能力,并为开发者提供更多高效、安全和可靠的工具。同时,对外部函数和本机代码的支持也预示着Java将更加深入地与其他编程语言和平台集成。

? 总结

Java JDK 21带来了多项创新特性,进一步巩固了Java在软件开发领域的领先地位。从结构化并发到字符串模板,每一个新特性都代表了Java对提高开发者生产力和代码质量的承诺。未来的Java开发者可以期待一个更加强大、灵活和高效的开发环境,无论是构建企业级应用还是开发下一代创新产品。

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最新Java JDK 21:全面解析与新特性探讨
  • 摘要:
  • 引言:
  • 正文:
  • ? 结构化并发
  • ? 范围值
  • ? 禁止动态加载代理的
  • ? 用于密钥封装机制的 API
  • ? 弃用 Windows 32 位 x86 端口以进行删除
  • ? 未命名类和实例主要方法
  • ? 未命名模式和变量
  • ? 分代 ZGC
  • ? 记录模式
  • ? switch 的模式匹配
  • ? 矢量 API
  • ? 外部函数和内存 API
  • ? 虚拟线程
  • ? 集合
  • ? 字符串模板
  • ?结论
  • ? 未来展望
  • ? 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com