最新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.xdnf.cn/news/139137.html

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

相关文章

MYSQL性能优化——基于成本的优化

MYSQL性能优化 详见 GitBook MYSQL性能优化 什么是成本 我们之前老说MySQL执行一个查询可以有不同的执行方案,它会选择其中成本最低,或者说代价最低的那种方案去真正的执行查询。不过我们之前对成本的描述是非常模糊的,其实在MySQL中一条查…

功能测试如何编写测试用例

测试用例的编写需要按照一定的思路进行,而不是想到哪写到哪,一般测试机制成熟的公司都会有公司自己自定义的测试用例模板,以及一整套的测试流程关注点,当然我们自己在测试生涯中也应当积累一套自己的测试框架,所有功能…

Socks5与HTTP的区别与应用场景

在网络访问中,代理服务器扮演着重要角色,用于保护用户隐私、提高访问速度等。Socks5代理和HTTP代理是两种常见的代理协议,它们在功能和应用场景上有所不同。本文将深入解析Socks5代理和HTTP代理的区别,帮助您更好地了解并选择适合…

vue 使用cornerstone解析 .dcm 文件

// 首先下载依赖 npm install --save cornerstone-core cornerstone-math cornerstone-tools hammerjs cornerstone-web-image-loader 下载之后再package.json中可以看到最后图片的依赖// 下面是完成的组件代码 <template><div id"dicom_canvas" refdicom_c…

第七章 查找 五、二叉排序树

目录 一、定义 二、代码实现 1、查找 2、插入 3、构造 4、删除 三、查找效率分析 1、查找成功ASL 2、查找失败ASL 四、总结 一、定义 二叉排序树&#xff08;Binary Search Tree&#xff0c;BST&#xff09;是一种特殊的二叉树&#xff0c;它满足以下条件&#xff1a…

上新!100%国产物料认证,米尔入门级国产核心板全志T113-i方案

自米尔国产全志T113系列的核心板发布以来&#xff0c;这款高性价比、低成本、入门级、高性能的国产核心板咨询不断&#xff0c;配套的开发板已经成交量数百套&#xff0c;深受工程师们的青睐&#xff0c;为了集齐T113全系列的产品&#xff0c;这次米尔发布了基于全志T113-i处理…

内存管理之虚拟内存

本篇遵循内存管理->地址空间->虚拟内存的顺序描述了内存管理、地址空间与虚拟内存见的递进关系&#xff0c;较为详细的介绍了作为在校大学生对于虚拟内存的理解。 内存管理 引入 RAM&#xff08;内存&#xff09;是计算机中非常重要的资源&#xff0c;由于造价的昂贵&…

Postman使用_参数设置和获取

文章目录 参数引用内置动态参数手动添加参数脚本设置参数脚本获取参数 参数就像变量一样&#xff0c;它可以是固定的值&#xff0c;也可以是变化的值&#xff0c;比如&#xff1a;会根据一些条件或其他参数进行变化。我们如果要使用该参数就需要引用它。 参数引用 引用动态参数…

【Spring Boot】拦截器学习笔记

一、普通拦截器 1&#xff0c;新建类MyWebConfig实现WebMvcConfigurer&#xff0c;实现addInterceptors方法 Overridepublic void addInterceptors(InterceptorRegistry registry) {registry// 不拦截哪些请求.excludePathPatterns("/login")// 拦截哪些请求.addPat…

负载均衡策略

一台机器不能满足&#xff0c;则增加两台或者多台机器&#xff0c;共同承担访问压力&#xff0c;这就是典型的集群和负载均衡架构。 一、轮询&#xff08;Round Robin&#xff09; 按照顺序将请求依次分配给每个服务器&#xff0c;确保每个服务器都能平均分担负载。 二、哈…

缺口的大利润!伦敦银如何使用缺口交易

在伦敦银市场中&#xff0c;我们经常能够看见市场跳空形成缺口&#xff0c;其实&#xff0c;如果利用得当&#xff0c;我们在伦敦银投之中&#xff0c;这些缺口是能够为我们创造盈利机会的&#xff0c;那么下面我们就来讨论一下在伦敦银投之中如何认识这些跳空缺口&#xff0c;…

【SpringBoot集成Redis + Session持久化存储到Redis】

目录 SpringBoot集成Redis 1.添加 redis 依赖 2.配置 redis 3.手动操作 redis Session持久化存储到Redis 1.添加依赖 2.修改redis配置 3.存储和读取String类型的代码 4.存储和读取对象类型的代码 5.序列化细节 SpringBoot集成Redis 1.添加 redis 依赖 …

SkyWalking入门之Agent原理初步分析

一、简介 当前稍微上点体量的互联网公司已经逐渐采用微服务的开发模式&#xff0c;将之前早期的单体架构系统拆分为很多的子系统&#xff0c;子系统封装为微服务&#xff0c;彼此间通过HTTP协议RESET API的方式进行相互调用或者gRPC协议进行数据协作。 早期微服务只有几个的情况…

Amazon Lightsail——兼具亚马逊云科技的强大功能与 VPS 的简易性

对于开发者而言&#xff0c;当你想构建系统架构时&#xff0c;你的面前就出现了两种选择&#xff0c;选择一&#xff1a;花时间去亲手挑选每个亚马逊云科技组件&#xff08;云服务器、存储、IP 地址等&#xff09;&#xff0c;然后自己组装起来&#xff1b;选择二是只需要一个预…

个人博客网站一揽子:Docker搭建图床(Lsky Pro)

Lsky Pro 介绍 Lsky Pro 是一个用于在线上传、管理图片的图床程序&#xff0c;中文名&#xff1a;兰空图床&#xff0c;你可以将它作为自己的云上相册&#xff0c;亦可以当作你的写作贴图库。 兰空图床始于 2017 年 10 月&#xff0c;最早的版本由 ThinkPHP 5 开发&#xff0…

【ICCV 2023】FocalFormer3D : Focusing on Hard Instance for 3D Object Detection

原文链接&#xff1a;https://arxiv.org/abs/2308.04556 1. 引言 目前的3D目标检测方法没有显式地去考虑漏检问题。   本文提出了困难实例探测&#xff08;HIP&#xff09;。受目标检测的级联解码头启发&#xff0c;HIP逐步探测误检样本&#xff0c;极大提高召回率。在每个阶…

第三天:实现网络编程基于tcp/udp协议在Ubuntu与gec6818开发板之间双向通信

互联网地址 每一台设备接入互联网后&#xff0c;都会举报一个唯一的地址编号 IP地址 INTERNET地址 internet地址 &#xff1a;它是协议上的一个逻辑地址 目前来说&#xff0c;我们主要的IP地址有两类 IPV4 IPV6 IPV4 其实就是使用一个32bit整数作为IP IPV6 其实就是使用一…

【C++】模板初阶

今天开始将图片的水印全部去掉&#xff0c;以方便大家的观看和知识截屏分享&#xff0c;希望对大家都有所帮助 模板初阶目录&#xff1a; 一、什么是泛型编程&#xff08;编写与类型无关的代码&#xff09; 二、函数模板 2.1概念与格式 2.2底层原理 2.3实例化&#xff08;…

基于Spring Boot的网上购物商城系统

目录 前言 一、技术栈 二、系统功能介绍 用户功能模块的实现 管理员功能模块的实现 商家功能模块的实现 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 本课题是根据用户的需要以及网络的优势建立的一个基于Spring Boot的网上购物商城系统&#xff0c;…

记录一次错误---想让U-net网络输入大小不一致的图片

最近在看Deeplab系列的论文&#xff0c;文中提到了语义分割领域的一个难题是&#xff1a;将图片输入网络之前需要resize成统一大小&#xff0c;但是resize的话会造成细节信息的损失&#xff0c;所以想要网络处理任意大小的图片输入。我之前训练的U-net网络都是resize成224*224大…