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

news2025/2/27 20:48:03

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁
🦄 博客首页——猫头虎的博客🎐
🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐
🌊 《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大小厂~💐

🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

文章目录

    • 最新Java JDK 21:全面解析与新特性探讨
    • 摘要:
    • 引言:
    • 正文:
    • 🚀 结构化并发
    • 🚀 范围值
    • 🚀 禁止动态加载代理的
    • 🚀 用于密钥封装机制的 API
    • 🚀 弃用 Windows 32 位 x86 端口以进行删除
    • 🚀 未命名类和实例主要方法
    • 🚀 未命名模式和变量
    • 🚀 分代 ZGC
    • 🚀 记录模式
    • 🚀 switch 的模式匹配
    • 🚀 矢量 API
    • 🚀 外部函数和内存 API
    • 🚀 虚拟线程
    • 🚀 集合
    • 🚀 字符串模板
    • 🚀结论
  • 🔮 未来展望
  • 📌 总结
  • 原创声明

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

JDK 21 的生产版本是在 6 月份的缩减和候选版本阶段之后发布的。作为长期支持版本,JDK 21 将获得五年的首要支持和扩展支持,直至 2031 年 9 月。之前的 LTS 版本是JDK 17,于 2021 年 9 月发布。非 LTS 版本,例如JDK 20和JDK 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 20和JDK 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 19和JDK 20中预览,将解构记录值。记录模式和类型模式可以嵌套,以实现强大的、声明性的、可组合形式的数据导航和处理。该提案的目标包括扩展模式匹配以解构记录类的实例并添加嵌套模式,从而实现更多可组合的数据查询。此功能与 switch 表达式和语句的模式匹配共同发展(见下文)。当前 JEP(JDK 增强提案)中的记录模式提案将根据持续的经验和反馈进一步完善该功能,最终确定该功能。除了较小的编辑更改之外,自第二次预览以来的主要更改是删除对增强for语句标题中出现的记录模式的支持。该功能可能会在未来的 JEP 中重新提出。

🚀 switch 的模式匹配

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

🚀 矢量 API

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

🚀 外部函数和内存 API

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

🚀 虚拟线程

(https://openjdk.org/jeps/444)是轻量级线程,有望显着减少编写、维护和观察高吞吐量并发应用程序的工作量。该计划的目标包括使以简单的按请求线程方式编写的服务器应用程序能够以接近最佳的硬件利用率进行扩展,使使用 API 的现有代码能够以最小的更改采用虚拟线程,并能够轻松调试和分析虚拟线程lang.Thread。使用当前 JDK 工具的线程。之前在JDK 20和JDK 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开发者可以期待一个更加强大、灵活和高效的开发环境,无论是构建企业级应用还是开发下一代创新产品。

在这里插入图片描述

原创声明

======= ·

  • 原创作者: 猫头虎

作者wx: [ libin9iOak ]

学习复习

本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。

作者保证信息真实可靠,但不对准确性和完整性承担责任

未经许可,禁止商业用途。

如有疑问或建议,请联系作者。

感谢您的支持与尊重。

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1030570.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STP生成树协议基本配置示例---STP逻辑树产生和修改

STP是用来避免数据链路层出现逻辑环路的协议,运行STP协议的设备通过交互信息发现环路,并通过阻塞特定端口,最终将网络结构修剪成无环路的树形结构。在网络出现故障的时候,STP能快速发现链路故障,并尽快找出另外一条路径…

放大电路的理解

如有错误,敬请指正 【电子】模拟电子技术基础 上交大 郑益慧主讲(模拟电路/模电 讲课水平堪比华成英,视频质量完爆清华版)_哔哩哔哩_bilibili

Redis面试问题三什么是缓存雪崩怎么解决

定义 缓存雪崩是因为大量的key设置了同一过期时间的导致在同一时间类缓存同时过期,而这时因为请求过来已经没有缓存了,DB压力大数据库崩溃了。 解决方法 我可以在设置过期时间的时候加一个随机时间,在1-5分钟那样可以分散过期时间&#xf…

ClickHouse面向列的数据库管理系统(原理简略理解)

目录 官网 什么是Clickhouse 什么是OLAP 面向列的数据库与面向行的数据库 特点 为什么面向列的数据库在OLAP场景中工作得更好 为什么ClickHouse这么快 真实的处理分析查询 OLAP场景的关键属性 引擎作用 ClickHouse引擎 输入/输出 CPU 官网 https://clickhouse.com…

python实现命令tree的效果

把所有的文档都传到了git上,但是内容过多找起来不方便,突发奇想如果能在readme中,递归列出所有文件同时添加上对应的地址,这样只需要搜索到对应的文件点击就能跳转过去了… 列出文件总得有个显示格式,所以就按照tree的来了… 用python实现命令tree的效果 首先,这是tree的效果…

JS 手写call、apply和bind方法

手写call、apply和bind方法 一、方法介绍1.1 call 方法1.2 apply 方法1.3 bind 二、方法的实现2.1 call 方法2.2 apply 方法2.3 bind 方法 一、方法介绍 apply、call和bind都是系统提供给我们的内置方法,每个函数都可以使用这三种方法,是因为apply、call…

Unity中关于多线程的一些事

一.线程中不允许调用unity组件api 解决方法:可以使用bool值变化并且在update中监测bool值变化来调用关于unity组件的API. 二.打印并且将信息输出到list列表中 多线程可能同时输出多条信息。输出字符串可以放入Queue队列中。队列可以被多线程插入。 三.启用socke…

计算机基础协议/概念:推送数据— —WebSocket与SSE;前端Blob/URL下载文件

计算机基础协议/概念:推送数据— —WebSocket与SSE 1 WebSocket:双向通信 1.1 概念:通信过程 ①Upgrade:浏览器告知服务器升级为WebSocket协议 ②Switch:服务器升级成功后会返回101状态码 ③Communicate&#xff1…

SQL注入脚本编写

文章目录 布尔盲注脚本延时注入脚本 安装xampp,在conf目录下修改它的http配置文件,如下,找到配置文件: 修改配置文件中的默认主页,让xampp能访问phpstudy的www目录,因为xampp的响应速度比phpstudy快得多&am…

使用EasyExcel后端导出excel

官方文档:关于Easyexcel | Easy Excel 这里进行简单记录,方便确定是不是适用此方式: 零:实体类中注解用法 一:读excel /*** 强制读取第三个 这里不建议 index 和 name 同时用,要么一个对象只用index&…

代码随想录算法训练营第二天(C) | 977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵

文章目录 前言一、977.有序数组的平方二、209.长度最小的子数组三、59.螺旋矩阵总结 前言 java版: 代码随想录算法训练营第二天 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵_愚者__的博客-CSDN博客 一、977.有序数组的平方 …

Python环境配置及基础用法Pycharm库安装与背景设置及避免Venv文件夹

目录 一、Python环境部署及简单使用 1、Python下载安装 2、环境变量配置 3、检查是否安装成功 4、Python的两种模式(编辑模式&交互模式) 二、Pycharm库安装与背景设置 1、Python库安装 2、Pycharm自定义背景 三、如何避免Venv文件夹 一、P…

【Java 基础篇】Java TCP通信详解

TCP(Transmission Control Protocol)是一种面向连接的、可靠的网络传输协议,它提供了端到端的数据传输和可靠性保证。TCP通信适用于对数据传输的可靠性和完整性要求较高的场景,如文件传输、网页浏览等。本文将详细介绍Java中如何使…

搜索二叉树【C++】

文章目录 二叉搜索树二叉搜索树的模拟实现构造函数拷贝构造函数赋值运算符重载函数析构函数Insert循环递归 Erase循环递归 Find循环递归 二叉搜索树的应用K模型KV模型 完整代码普通版本递归版本 二叉搜索树 二叉搜索树又称为二叉排序树,它或者是一棵空树&#xff0…

Spring Security 的身份验证绕过漏洞CVE-2023-34035

文章目录 0.前言漏洞漏洞介绍描述 1.参考文档2.基础介绍2.1 组件简介:2.2 漏洞简介: 3.解决方案3.1. 升级版本 0.前言 背景:公司收到关于 Spring Security 的一个身份验证绕过漏洞的通知,该漏洞被标识为 CVE-2023-34035 漏洞 高 …

滴滴可观测平台 Metrics 指标实时计算如何实现了又准又省?

在滴滴,可观测平台的 Metrics 数据有一些实时计算的需求,承载这些实时计算需求的是一套又一套的 Flink 任务。之所以会有多套 Flink 任务,是因为每个服务按照其业务观测需要不同的指标计算,也就对应了不同数据处理拓扑。我们尽力抽…

ruoyi-vue-pro yudao 项目商城 mall 模块启用及相关SQL脚本

目前ruoyi-vue-pro 项目虽然开源,但是商城 mall 模块被屏蔽了,查看文档却要收费 199元(知识星球),价格有点太高了吧。 分享下如何启用 mall 模块,顺便贴上sql相关脚本。 一、启用模块 修改根目录 pom.xm…

时序预测 | MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元时间序列预测

时序预测 | MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元时间序列预测 目录 时序预测 | MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元时间序…

工具篇 | Gradle入门与使用指南

介绍 1.1 什么是Gradle? Gradle是一个开源构建自动化工具,专为大型项目设计。它基于DSL(领域特定语言)编写,该语言是用Groovy编写的,使得构建脚本更加简洁和强大。Gradle不仅可以构建Java应用程序&#x…

亚马逊攀岩绳ASTM F2116 测试报告 EN892测试办理

攀岩绳是与攀岩安全带和锚点相连的一种装备,用于保护攀岩者,使其不会从高处跌落。攀岩绳由承重内芯和围绕内芯编织的护套组成。 亚马逊关于攀岩绳的政策 根据亚马逊的要求,所有攀岩绳均应经过检测,并且符合下列特定法规或标准要求…