Java/JDK 21正式发布!15个特性一览
JDK 21已经于2023年9月19日正式发布。本文总结了JDK 21发布的新特性。
发布版本说明
根据发布的规划,这次发布的 JDK 21 将是一个长期支持版(LTS 版)。LTS 版每 2 年发布一个,上一次长期支持版是 21 年 9 月发布的 JDK 17。
本版本是Java SE平台21版的参考实现,由Java社区流程中的JSR 396指定。
安装包下载
主要分为OpenJDK版本和Oracle版本,下载地址如下:
- OpenJDK版本:https://jdk.java.net/21/
- Oracle版本:https://www.oracle.com/java/technologies/downloads/
上述版本,如果是个人学习用途,则差异不大。但如果是用于商业用途,则需要仔细看好相关的授权。Oracle JDK商用需要遵循 Oracle No-Fee Terms and Conditions (NFTC)协议,而OpenJDK根据GPL v2许可获得许可。
更多有关Java的基本知识,可以参阅《Java核心编程》这本书,描述的非常详细。
JDK 21 新特性说明
正式稳定功能
JEP 431:序列集合
序列集合(Sequenced Collections)在 core-libs/java.util:collections
包中。
该 JEP 提议引入“一个新的接口族,用于表示集合的概念,这些集合的元素按照预定义的序列或顺序排列,它们是作为集合的结构属性。”这一提案的动机是由于集合框架中缺乏预定义的顺序和统一的操作集。
JEP 439:分代 ZGC
分代 ZGC(Generational ZGC)在 hotspot/gc
包中。
通过扩展Z垃圾回收器(ZGC)来维护年轻对象和年老对象的独立生成,从而提高应用程序性能。这将使ZGC能够更频繁地收集年轻对象——这些对象往往英年早逝。
JEP 440:记录模式
使用记录模式(Record Patterns)增强Java编程语言,以解构记录值。可以嵌套记录模式和类型模式,以实现功能强大、声明性和可组合形式的数据导航和处理。
JEP 441:switch 模式匹配
通过switch表达式和语句的模式匹配来增强Java编程语言。通过将模式匹配扩展到switch,可以针对多个模式测试表达式,每个模式都有一个特定的操作,从而可以简洁、安全地表达复杂的面向数据的查询。
JEP 444:虚拟线程
将虚拟线程(Virtual Threads)引入Java平台。虚拟线程是轻量级线程,可以显著减少编写、维护和观察高吞吐量并发应用程序的工作量。
详见《Java下一代高并发技术——虚拟线程(Virtual Threads)》。
JEP 449:弃用 Windows 32 位 x86 移植
弃用Windows 32位x86移植,并打算在将来的版本中将其删除。
JEP 451:准备禁止动态加载代理
将代理动态加载到正在运行的JVM中时发出警告。这些警告旨在让用户为将来的版本做好准备,该版本默认情况下不允许动态加载代理,以提高默认情况下的完整性。在启动时加载代理的可服务性工具不会导致在任何版本中发出警告。
JEP 452:密钥封装机制 API
介绍一种用于密钥封装机制(Key Encapsulation Mechanism,简称KEM)的API,这是一种使用公钥加密来保护对称密钥的加密技术。
预览阶段功能
JEP 430:字符串模板(预览)
使用字符串模板(String Templates)增强Java编程语言。字符串模板通过将文本与嵌入的表达式和模板处理器耦合来生成专门的结果,从而补充Java现有的字符串文本和文本块。这是一个预览语言功能和API。
JEP 442:外部函数和内存 API(第三次预览)
引入API,Java程序可以通过该API与Java运行时之外的代码和数据进行互操作。通过有效地调用外部函数(即JVM外部的代码),并通过安全地访问外部内存(即不受JVM管理的内存),API使Java程序能够调用本机库并处理本机数据,而不会出现JNI的脆弱性和危险性。这是一个预览API。
JEP 443:未命名模式和变量(预览)
使用未命名模式和未命名变量来增强Java语言,未命名模式匹配记录组件而不说明组件的名称或类型,未命名变量可以初始化但不使用。两者都用下划线字符_
表示。这是一个预览语言功能。
JEP 445:未命名类和实例主方法(预览)
发展Java语言,使学生无需理解为大型程序设计的语言功能即可编写第一个程序。学生们不用使用单独的Java方言,就可以为单类程序编写精简的声明,然后随着技能的发展,无缝地扩展程序,使用更高级的功能。这是一个预览语言功能。
JEP 446:作用域值(预览)
引入作用域值,这些值可以在不使用方法参数的情况下安全有效地共享给方法。它们优先于线程化局部变量,尤其是在使用大量虚拟线程时。这是一个预览API。
实际上,作用域值是一个隐式方法参数。这“就好像”一系列调用中的每个方法都有一个额外的、不可见的参数。没有任何方法声明此参数,只有能够访问作用域值对象的方法才能访问其值(数据)。通过作用域值,可以通过一系列中间方法将数据从调用者安全地传递给遥远的被调用者,这些中间方法不声明数据的参数,也无法访问数据。
JEP 453:结构化并发(预览)
通过引入用于结构化并发(Structured Concurrency)的API来简化并发编程。结构化并发将在不同线程中运行的相关任务组视为单个工作单元,从而简化错误处理和消除,提高可靠性,并增强可观察性。这是一个预览API。
孵化阶段功能
JEP 448:Vector API(孵化器第六阶段)
引入API来表示向量计算,这些向量计算在运行时可靠地编译为支持的CPU架构上的最佳向量指令,从而实现优于等效标量计算的性能。
参考引用

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
英伟达开源内核驱动 Nouveau 维护者 Ben Skeggs 辞职
英伟达 GPU 内核开源驱动 Nouveau 维护者 Ben Skeggs 在邮件列表宣布已从 Red Hat 辞职,以及退出 Nouveau 开发。 Ben Skeggs 此前一直为 Red Hat 工作,他从 2008 年起就担任 Nouveau 的维护者。他最后递交的补丁为内核驱动加入了利用英伟达 GPU 系统处理器 GSP 固件改进 RTX 20/30 系列显卡的硬件支持,加入对 RTX 40 Ada Lovelace GPU 的初步支持。 据介绍,Ben Skeggs 在很大程度上主导了内核驱动程序部分,他在 Red Hat 工作期间一直是 Nouveau 内核驱动程序的第一贡献者。 Ben Skeggs 表示,选择辞去维护者职务是他多年来一直在考虑的个人决定。随着 GSP-RM 极大地简化了对未来硬件的支持,以及围绕 NVK 建立的社区,目前一切都掌握在良好的环境中,所以自己时候去探索其他新事物了。
- 下一篇
使用 KubeSkoop exporter 监测和定位容器网络抖动问题
本文是 8 月 17 日直播的文字稿整理,微信公众号「阿里云云原生」可观看直播回放。除去文章内容外,还包括针对实际网络问题的实战环节。 容器网络抖动问题发生频率低,时间短,是网络问题中最难定位和解决的问题之一。不仅如此,对 Kubernetes 集群内的网络状态进行日常的持续性监测,也是集群运维中很重要的一环。 KubeSkoop 基于 eBPF 技术,提供了 Pod 粒度的、低开销的、可热插拔的实时网络监测能力,不仅可以满足日常网络监控的需要,也能够在出现网络问题后,通过开启对应的探针,快速定位及解决问题。KubeSkoop 提供了基于 Prometheus 的指标和 Grafana 大盘,同时也提供了基于命令行、基于 Loki 的异常事件透出能力,提供问题现场的详细信息。 本次分享将包括: 应用如何收到/发出数据包 网络问题排查的难点,传统网络问题排查工具以及传统工具的问题 对 KubeSkoop 和网络监测部分(即 KubeSkoop exporter)的简单介绍 结合内核中的不同的模块详细介绍 KubeSkoop exporter 的探针、指标和事件 在日常监测和异常排查中使用...
相关文章
文章评论
共有0条评论来说两句吧...