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

🌷🍁 博主猫头虎 带您 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.mzph.cn/news/85481.shtml

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

相关文章

C++之容器std::stack类empty、size、top、push、emplace、pop、swap应用总结(二百二十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

Linux 本地 Docker Registry本地镜像仓库远程连接【内网穿透】

Linux 本地 Docker Registry本地镜像仓库远程连接 文章目录 Linux 本地 Docker Registry本地镜像仓库远程连接1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址…

基于matlab实现的中点放炮各类地震波时距曲线程序

完整程序&#xff1a; clear all dx50;x-500:dx:500;%炮检距 h100;V11500; theta25*pi/180; V2V1/sin(theta); t1sqrt(x.*x4*h*h)/V1;%反射波时距曲线 t2abs(x)./V1;%直达波时距曲线 %折射波时距曲线 xm2*h*tan(theta);%求盲区 k1; for i1:length(x) if x(i)<-xm …

基于docker进行Grafana + prometheus实现服务监听

基于docker进行Grafana Prometheus实现服务监听 Grafana安装Prometheus安装Jvm监控配置服务器主机监控(基础cpu&#xff0c;内存&#xff0c;磁盘&#xff0c;网络) Grafana安装 docker pull grafana/grafanamkdir /server/grafanachmod 777 /server/grafanadocker run -d -p…

POJ 3977 Subset 折半枚举+二分搜素+双指针

一、题目大意 我们有N&#xff08;N<35&#xff09;个元素&#xff0c;从中选取一个子集&#xff0c;使得它的元素求和的绝对值最小&#xff0c;如果有多个可行解&#xff0c;选择元素最小的。 输出最优子集的元素总和绝对值&#xff0c;和最优子集元素的数量。 二、解题…

JavaWeb 学习笔记 7:Filter

JavaWeb 学习笔记 7&#xff1a;Filter 1.快速开始 使用过滤器的方式与 Servlet 类似&#xff0c;要实现一个Filter接口&#xff1a; WebFilter("/*") public class FirstFilter implements Filter {public void init(FilterConfig filterConfig) throws ServletE…

多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出

多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出 目录 多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出…

《向量数据库指南》——向量搜索库Faiss 迁移到 Milvus 2.x

Faiss -> Milvus 2.x 1. Faiss 数据准备 前提条件是用户已经准备好了自己的 faiss 数据文件。(为了能快速体验,在项目源码的 testfiles 目录下放置了 faiss 测试数据方便用户体验: faiss_ivf_flat.index. 2. 编译打包 这部分同上,不再展开介绍。 3. 配置 migration.ymal…

vue下载Excel文件

前端vue实现导出Excel文件 用到的是 上代码 var wb XLSX.utils.table_to_book(document.querySelector(#my-table));//关联dom节点 这个是表格绑定的id名称var wbout XLSX.write(wb, {bookType: xlsx,bookSST: true,type: array})try {FileSaver.saveAs(new Blob([wbout], {…

【教学类】公开课学号挂牌(15*15CM手工纸)

作品展示&#xff1a; 15*15CM手工纸 文本框12磅加粗。学号数字是段落写入&#xff0c;黑体270磅 背景需求 最近都在小班、中班、大班里做“Python学具测试”&#xff0c;由于都是陌生的孩子&#xff0c;上课时&#xff0c;我通常只能喊“白衣服的女孩”“花格子衣服的男孩”…

精华回顾:Web3 前沿创新者在 DESTINATION MOON 共话未来

9 月 17 日&#xff0c;由 TinTinLand 主办的「DESTINATION MOON: Web3 Dev Summit Shanghai 2023」线下活动在上海黄浦如约而至。 本次 DESTINATION MOON 活动作为 2023 上海区块链国际周的 Side Event&#xff0c;设立了 4 场主题演讲与 3 个圆桌讨论&#xff0c;聚集了诸多…

strtok()函数的使用方法

strtok() 函数用于将字符串分割成子字符串&#xff08;标记&#xff09;。它在 C 语言中非常常用&#xff0c;可以通过指定分隔符来拆分原始字符串&#xff0c;并依次返回每个子字符串。 以下是 strtok() 函数的使用方法&#xff1a; #include <stdio.h> #include <…

Python方法汇总:轻松实现功能!

在爬虫开发中&#xff0c;有时需要模拟登录网站以获取更多的数据或执行特定的操作。本文将为你总结几种常用的Python爬虫模拟登录方法&#xff0c;帮助你轻松实现登录功能&#xff0c;让你的爬虫更加强大有用。 一、基于Requests库的模拟登录 1. 使用Session对象&#xff1a;…

UOS Deepin Ubuntu Linux 开启 ssh 远程登录

UOS Deepin Ubuntu Linux 开启 ssh 远程登录 打开控制台 安装 openssh-server sudo apt -y install openssh-server修改 /etc/ssh/ssh_config 文件 sudo vim /etc/ssh/ssh_config找到 # Port 22 去掉 # 注释后 保存 重启 ssh 服务 sudo systemctl restart ssh设置 ssh 服务 开机…

ros开发中编译cpp文件的2个办法

方式一&#xff1a; 在Ubuntu控制台输入指令 cd catkin_ws 进入到工作空间 然后在输入&#xff1a; catkin_make --pkg catkin_practice 注释&#xff1a;以上catkin_ws是工作空间名称&#xff0c;catkin_practice是工作空间中将要被编译的包的名称 方式二&#xff1a; …

前端控制小数点精度及数字千位分割

前端控制小数点精度及数字千位分割&#xff0c;表头居中&#xff0c;每行单元格内容居右。 前端控制小数点精度&#xff1a; <el-table-column prop"cycz" label"差异产值" header-align"center" align"right"><template s…

JVM高级性能调试

标准的JVM是配置为了高吞吐量&#xff0c;吞吐量是为了科学计算和后台运行使用&#xff0c;而互联网商业应用&#xff0c;更多是为追求更短的响应时间&#xff0c;更低的延迟Latency&#xff08;说白了就是更快速度&#xff09;&#xff0c;当用户打开网页没有快速响应&#xf…

安卓机型-MTK芯片掉串码 掉基带 如何用工具进行修复 改写参数

在早期MTK芯片机型中较多使用AP BP方式来修复mtk芯片机型的串码。目前MTK机型对于丢基带 掉串码问题大都使用MODEM META工具来进行修复串码或者改写参数。今天以一款mtk芯片机型来做个演示&#xff0c; 高通芯片类的可以参考; 高通改串相关 工具仅支持在联发科芯片组上运行的…

WEB使用VUE3实现地图导航跳转

我们在用手机查看网页时可以通过传入经纬度去设置目的地然后跳转到对应的地图导航软件&#xff0c;如果没有下载软件则会跳转到下载界面 注意&#xff1a; 高德地图是一定会跳转到一个新网页然后去询问用户是否需要打开软件百度和腾讯地图是直接调用软件的这个方法有缺陷&…

iOS——引用计数(一)

自动引用计数 自动引用计数&#xff08;ARC&#xff0c;Automatic Reference Counting&#xff09;是指内存管理中对引用采取自动计数的技术。 满足以下要求后&#xff0c;我们的代码就无需再次键入retain或者是release代码了&#xff1a; 使用Xcode 4.2或以上版本使用LLVM编…