Java/JDK 21正式发布!15个特性一览

2023-09-20 14:06:31

JDK 21已经于2023年9月19日正式发布。本文总结了JDK 21发布的新特性。

发布版本说明

根据发布的规划,这次发布的 JDK 21 将是一个长期支持版(LTS 版)。LTS 版每 2 年发布一个,上一次长期支持版是 21 年 9 月发布的 JDK 17。

本版本是Java SE平台21版的参考实现,由Java社区流程中的JSR 396指定。

安装包下载

主要分为OpenJDK版本和Oracle版本,下载地址如下:

上述版本,如果是个人学习用途,则差异不大。但如果是用于商业用途,则需要仔细看好相关的授权。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架构上的最佳向量指令,从而实现优于等效标量计算的性能。

参考引用

更多推荐

ChatGPT:字符串操作问题——提取包含括号的字符串中的题干内容

ChatGPT:字符串操作问题——提取包含括号的字符串中的题干内容Stringtitle=p.text().split(“(”)[0];为什么会报错ChatGPT:在这段代码中,您正在使用Java处理一个字符串(假设是HTML或文本),尝试将其分割成两部分,其中一个是从左括号"("之前的内容。这段代码的目的是提取标题,

消息队列(三):硬盘管理

我在第一章提到过:关于持久化那一块,在内存存储主要是获取比较方便,在硬盘上存储主要是为了长时间存储。关于内存管理又分两部分:数据库管理和文件管理(主要是和消息有关)。硬盘管理硬盘中的数据库管理其实在上一章的建库建表说过了,就这么几步,SQLite+MyBatis几十行代码就搞定了除此之外就是对其进行一个封装即可。这里的

K8S名称空间和资源配额

Kubernetes支持多个虚拟集群,底层依赖于同一个物理集群。这些虚拟集群被称为名称空间。名称空间namespace是k8s集群级别的资源,可以给不同的用户、租户、环境或项目创建对应的名称空间,例如,可以为test、dev、prod环境分别创建各自的命名空间。当多个用户或团队共享具有固定节点数目的集群时,人们会担心有

5.k8s jenkins集成k8s一键发布案例

文章目录前言一、jenkins配置1.1jenkins配置git1.2jenkins配置maven1.3jenkins配置java二、jenkins流水线配置2.1.新增项目2.2springboot项目配置git仓库2.3springboot项目配置maven打包2.4系统配置ssh到hadoop1配置,也就是k8s

MYSQL01高级_Linux版安装、各级别字符集、字符集与比较规则、SQL大小写规范

文章目录①.MySQL-linux版安装②.字符集的相关操作③.各级别的字符集④.字符集与比较规则(了解)⑤.SQL大小写规范⑥.sql_mode的合理设置①.MySQL-linux版安装①.进入mysql官网,找到安装文件②.将抽取出来的文件放在linux下的opt下MySQLCommunityServer社区版本,

创邻科技,位居IDC MarketScape中国图数据库市场领导者类别

图数据库,正进入市场发展的新阶段。随着中国经济社会数字化转型加速,数据成为新型生产要素。如何存储并管理海量数据,挖掘数据价值,打破原有增长天花板,成为企业重塑商业价值的关键。存量经济时代更需要深层关系挖掘,打造更深刻的客户洞察和画像,从点、面、网来做网络分析。作为数字化企业构建相对竞争优势的关键技术,图数据库正大步迈进

企业级通用低代码开发平台——一二三应用开发平台发布4.2开源版本,回顾与展望

背景今年三月初,确定了自己将来很长一段时间要做的事情,再启程,从头开始,研发一套应用开发平台,完全开源,详见https://blog.csdn.net/seawaving/article/details/129334330。从头开始,不是从零开始,大量的技术选型工作,平台设计与实现工作,都已实现,需要的大多是迁移和优化

开源在医疗健康领域的应用

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

三维模型3DTile格式轻量化压缩的遇到常见问题与处理方法分析

三维模型3DTile格式轻量化压缩的遇到常见问题与处理方法分析三维模型的轻量化压缩是一项技术挑战,特别是在处理复杂的3DTile格式时。下面列举了一些处理过程中可能遇到的常见问题以及相应的处理方法:模型精度损失:在进行压缩处理时,由于顶点减少或数据精度降低,可能导致模型的精度损失,表现为模型变形或者细节丢失。对此,我们

基础数据结构与算法总结3(附有完整代码,适合小白)

目录前言13,哈希表14,二叉搜索树14.1,二叉搜索树完整代码如下15,平衡二叉树15.1,平衡二叉树完整代码如下:16,排序篇16.1,插入排序(稳定)16.2,插入排序完整代码16.3,冒泡排序(稳定)16.4,冒泡排序完整代码16.5,快速排序(不稳定)16.6,快速排序完整代码16.7,合并排序(稳定)16.

爬虫框架Scrapy学习笔记-2

前言Scrapy是一个功能强大的Python爬虫框架,它被广泛用于抓取和处理互联网上的数据。本文将介绍Scrapy框架的架构概览、工作流程、安装步骤以及一个示例爬虫的详细说明,旨在帮助初学者了解如何使用Scrapy来构建和运行自己的网络爬虫。爬虫框架Scrapy学习笔记-1文章目录前言Scrapy架构概览Scrapy工

热文推荐