JDK21:Java21的新特性

news2024/12/28 12:04:09

背景

定于9月推出的Java21计划现在包括一个关键封装机制API和32位Windows端口的弃用。
在这里插入图片描述
Java开发工具包(JDK)21将于9月作为Oracle标准Java实现的下一个长期支持版本,现在有13个功能被正式提出,最近几天又增加了两个功能。

最新的提议包括密钥封装机制(KEM)API和32位x86 Windows端口的弃用。本月早些时候,还添加了其他三个功能,即代Shenandoah垃圾收集器、未命名类和实例主方法以及未命名模式和变量。

这五个建议结合了3月和4月提出的八个功能:一代ZGC(Z垃圾收集器)、记录模式、switch表达式和语句的模式匹配、向量API、序列化集合、虚拟线程、字符串模板预览以及外部函数和内存API的第三个预览。另外,JDK 21还将改变Windows上网络接口的网络名称分配方式。

GPL下的早期访问二进制文件可在jdk.java.net上获得。Oracle每六个月发布一次标准java的新版本,最近的jdk 20已于3月21日发布。到目前为止,JDK 21的具体建议包括:

  • 密钥封装机制API,一种通过公共加密来保护对称密钥的加密技术。该提案的一个目标是使应用程序能够使用KEM算法,如RSA密钥封装机制(RSA-KEM)、椭圆曲线集成加密方案(ECIES),以及美国国家标准与技术研究所(NIST)后量子密码学标准化过程的候选算法。另一个目标是使KEM能够在更高级别的协议(如传输层安全性(TLS))和加密方案(如混合公钥加密(HPKE))中使用。此外,安全提供商将能够在Java代码或本机代码中实现KEM算法,并包括在RFC 9180中定义的Diffie-Hellman KEM(DHKEM)的实现。
  • 不推荐删除Windows 32位x86端口,目标是在将来的版本中删除它。该提案旨在更新生成系统,以便在尝试为Windows 32位x86配置生成时发出错误消息。该消息将通过新的配置选项被抑制。此外,计划将端口和相关端口特定功能标记为不推荐在相关文档中删除。该提案指出,Windows 10是最后一款支持32位操作的Windows操作系统,将于2025年10月停止使用。
  • Generational Shenandoah,一项旨在增强Shenandoh GC的提案,具有实验性的代收集能力,以提高可持续吞吐量、负载峰值弹性和内存利用率。该提案的主要目标是在不打破非世代Shenandoah的情况下提供一种实验性的世代模式,目的是在未来的版本中使世代模式成为默认模式。其他目标包括在不牺牲低GC暂停的情况下减少持续的内存占用,减少CPU和功耗,保持高吞吐量,以及继续支持压缩对象指针。该提案最初将支持x64和AArch64,并随着实验模式的发展而增加对其他指令集的支持。它的目标不是取代非世代的Shenandoah,它将继续作为默认的操作模式,其性能或功能不会倒退。提高每一个可以想象的工作量的性能也不是一个目标。
  • 预览未命名的类和实例主方法,以发展语言,使学生能够编写他们的第一个Java程序,而无需理解为大型程序设计的语言功能。学生们可以为单类程序编写精简的声明,而不是使用单独的Java方言,然后随着技能的发展,无缝地扩展程序以使用更高级的功能。其目的是为Java提供一个平滑的入口。
  • 未命名模式和变量的预览,以使用未命名的模式和未命名的变量增强语言。未命名的模式匹配记录组件,而不说明组件的名称或类型,而未命名的变量可以初始化但不能使用。两者都用下划线字符_表示。该建议旨在通过消除不必要的嵌套模式来提高记录模式的可读性,并通过识别必须声明但不会使用的变量来提高所有代码的可维护性。
  • Generational ZGC旨在通过扩展ZGC来为新对象和旧对象保持独立的生成,从而提高应用程序性能。年轻的物体往往英年早逝,保持不同的世代将使ZGC能够更频繁地收集它们。使用世代ZGC运行的应用程序应该看到以下好处:更低的分配停滞风险、更低的堆内存开销和更低的垃圾收集CPU开销。与非世代ZGC相比,这些好处应该不会显著降低吞吐量。
  • JDK19和JDK20中预览的记录模式将解构记录值。可以嵌套记录模式和类型模式,以实现强大、声明性和可组合形式的数据导航和处理。该提案的目标包括扩展模式匹配以销毁记录类的实例,并添加嵌套模式,从而实现更可组合的数据查询。此功能与交换机的模式匹配共同发展。当前JEP(JDK Enhancement Proposal)中的记录模式建议在持续的经验和反馈的基础上进一步完善该功能。除了小的编辑更改外,自第二次预览以来的主要更改是删除了对出现在增强的for语句标题中的记录模式的支持。该功能可能会在未来的JEP中重新提出。
  • switch的模式匹配使switch表达式或语句能够针对多个模式进行测试,每个模式都有特定的操作,因此可以安全简洁地表达复杂的面向数据的查询。这个特性最初是在JDK17中提出的,后来在JDK18、JDK19和JDK20中进行了改进。它将在JDK 21中最终确定,并根据反馈和经验进行进一步改进。与以前的JEP相比,主要的变化是删除了带括号的模式,并允许使用限定的枚举常量,如带有开关表达式和语句的case常量。目标包括通过允许模式出现在case标签中来扩展switch表达式和语句的表达性和适用性,允许在需要时放松switch的历史null敌意,并通过要求模式switch语句覆盖所有潜在输入值来提高switch语句的安全性。另一个目标是确保现有的switch表达式和语句在没有任何更改的情况下继续编译,并以相同的语义执行。
  • Vector API的第六个孵化器,用于表达向量计算,这些计算在运行时可靠地编译为支持的CPU体系结构上的最优向量指令,实现优于等效标量计算的性能。这之前已经在JDK16到JDK20中进行了培育。最新版本包括性能增强和错误修复。该提案的目标包括清晰简洁,与平台无关,并在x64和AArch64架构上提供可靠的运行时编译和性能。其他目标包括优雅的降级,当矢量计算在运行时不能完全表示为矢量指令序列时,以及与Project Valhalla保持一致。
  • 外部函数和内存API使Java程序能够与Java运行时之外的代码和数据进行互操作。通过有效调用外部函数和安全访问外部内存,此预览API使Java程序能够调用本机库并处理本机数据,而不会出现JNI(Java native Interface)的脆弱性和危险性。API之前在上个月首次亮相的JDK 20和2022年9月发布的JDK 19中进行了预览。最新预览中的改进包括使用新元素来取消引用地址布局的增强布局路径、对Arena接口中本地段的生存期的集中管理、回退本地链接器实现以及删除VaList。该提案的目标包括易用性、性能、通用性和安全性。在这个API之上重新实现JNI或以任何方式更改JNI都不是我们的目标。
  • 虚拟线程是轻量级线程,承诺“显著”减少编写、维护和观察高吞吐量并发应用程序的工作量。该计划的目标包括使以简单线程请求方式编写的服务器应用程序能够以接近最佳的硬件利用率进行扩展,使使用lang.thread API的现有代码能够采用变化最小的虚拟线程,并使用当前JDK工具轻松调试和分析虚拟线程。之前在JDK20和JDK19中预览过,虚拟线程将在JDK21中最终确定。有了JDK21,虚拟线程现在一直支持线程本地变量,这使得不可能创建没有这些变量的虚拟线程。对线程本地变量的有保证的支持确保了更多的现有库可以与虚拟线程一起使用,并有助于迁移面向任务的代码以使用虚拟线程。
  • 序列集合引入了接口来表示具有定义的相遇顺序的集合。每个集合都有定义明确的第一和第二元素,依此类推,直到最后一个元素。提供了统一的API来接受第一个和最后一个元素,并以相反的顺序处理元素。该提议的动机是Java的集合框架缺乏一种集合类型来表示具有定义的相遇顺序的元素序列。它还缺乏一套适用于这些集合的统一操作。这些差距一直是一个问题,也是投诉的根源。该提案要求定义集合、集合和映射的排序接口,并将其改造为现有的集合类型层次结构。所有这些新方法都有默认实现。
  • 字符串模板作为预览功能出现,通过将文本与嵌入的表达式和处理器耦合以产生专门的结果,来补充Java现有的字符串文本和文本块。此语言功能和API旨在简化Java程序的编写,使其易于表达包含运行时计算的值的字符串。它承诺增强表达式的可读性,提高程序安全性,保持灵活性,并简化接受用非Java语言编写的字符串的API的使用。实现从结合文字文本和嵌入表达式派生的非字符串表达式的开发也是一个目标。

Oracle的Java团队表示,除了这些JEP之外,JDK为Windows上的网络接口分配的网络名称将在JDK 21中更改。建议进行网络多播或使用java.net.NetworkInterface API的应用程序的维护人员注意这一更改。

JDK历史上合成了Windows上网络接口的名称。此名称已更改为使用Windows操作系统指定的名称。更改可能会影响使用NetworkInterface.GgetbyName(字符串名称)方法查找网络接口的代码。

JDK21的发布计划包括6月8日和7月20日的逐步减少阶段。该功能集在第一个渐变阶段被冻结,同时错误修复仍在继续。接下来是8月10日和8月24日的首次和最终候选版本,仍然可以修复错误,然后在9月19日正式发布。

作为一个长期支持(LTS)版本,JDK 21将获得五年的卓越支持,并将支持延长至2031年9月。当前的LTS版本是JDK 17,发布于2021年9月。非LTS版本,如JDK20和JDK19,只获得六个月的首要支持,没有扩展支持。

JDK21还可以添加一些其他潜在的功能。一个是预览用于在线程内和线程间共享不可变数据的作用域值。这个特性是在JDK 20中培育出来的。第二种可能性是分级结构化并发,这是一种简化错误处理和提高可靠性的建议,用于预览状态。这个特性以前是在JDK19和JDK20中培育出来的。

准备禁止动态加载代理的功能是第三种可能性。当代理被动态加载到正在运行的JVM中时,此功能将发出警告,为默认情况下不允许加载动态代理的未来版本做准备。最后,JDK21的第四个潜在特性是一个实验性的紧凑对象头功能,旨在减少JVM中对象头的大小,以减少堆大小。

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

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

相关文章

ATECLOUD云测试平台新能源电机测试系统:高效、可扩展的测试利器

随着全球对环境保护的日益重视,新能源的发展越来越受到关注。电动汽车作为新能源领域的重要组成部分,其性能和质量对于消费者来说至关重要。为了确保电动汽车的性能和质量,测试系统平台解决方案变得越来越重要。本文将介绍一种基于ATECLOUD智…

10分钟学会sovits第一篇

So-vits-svc 基于端到端架构的VITS和soft-vc,用户只需准备几十分钟到几个小时不等的语音或歌声数据,就能制作(训练)属于自己的 AI 声库 (前提是你的显卡足够给力),将一段语音或歌声转换为你想要…

上饶广信区个体私营经济协会新班子力争打造全国样板

5月26日下午,江西省上饶市广信区个体私营经济协会第二届理事会暨会员代表大会在上饶京都国际大酒店隆重召开,来自协会的200多名理事会员单位及社会各界嘉宾、媒体代表共计300余人参加了此次大会。本次大会成功举行了换届大会,通过举手表决方式…

解决启动tomcat出现的The JRE_HOME environment variable is not defined correctly问题~

错误描述如下: 解决办法: 首先打开环境变量的编辑位置检查你的环境变量是否配置完成: 环境变量配置如果没有问题,但启动tomcat还是出现上述错误,则可进行下述步骤: 找到目标文件: 右击对其进行…

R-Meta分析与【文献计量分析、贝叶斯、机器学习等】多技术融合实践与拓展进阶

目录 专题一 Meta分析的选题与文献计量分析CiteSpace应用 专题二 Meta分析与R语言数据清洗及相关应用 专题三 R语言Meta分析与精美作图 专题四 R语言Meta回归分析 专题五 R语言Meta诊断分析与进阶 专题六 R语言Meta分析的不确定性及贝叶斯应用 专题七 深度拓展机器学习在…

Word控件Spire.Doc 【其他】教程(3):使用 Marco 加载 Word 、删除 Marco

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

【现实生活实际应用】【公交车换乘算法——算法用在公交车】【bfs在图论】【单源最短路-如何根据图意构建图,最重要】最优乘车【sstream输入】

问题出现了 其实我们构图的时候, 我们已经知道1 - 3 - 5 那么我们直接让1 连到 3 和 5 表示直达 如果出现另一路 4 7 3 6 则3最终连接的是 5 和 6 从1开始,先走到了 3 和 5 然后bfs宽搜到3(此时就表示换乘了,因为1直达的已经都遍历…

分布式网络通信框架(十五)——Mprpc项目总结

程序调用时序图 下图介绍了项目代码的调用时序,从rpc服务提供方开始看 简单描述项目、实现了怎样的功能?采用了哪些技术栈 这个项目是基于C语言实现的一个RPC分布式网络通信框架项目,使用CMake在Linux平台上构建编译环境。它可以将任何单体…

北醒Modbus协议在Python下Tkinter模块实现功能配置的GUI设计

目录 实验目的测试环境Python库需求Benewake(北醒) TF雷达接线示意图库安装说明例程运行展示 实验目的 实现485接口系列雷达Modbus协议在Python下Tkinter模块实现功能配置的GUI设计。 本例程主要功能如下: 1.设备连接(已知雷达设备的波特率和站号&#…

投票评选活动小程序怎么做

投票评选活动小程序怎么做,做一下笔记,记录一下分析、开发搭建的过程。 焦点图 焦点图用于主题展示。焦点图使用了image组件,其中mode为设置图片裁剪、缩放的模式。widthFix缩放模式,宽度不变,高度自动变化&#xff0…

【Stata】teffects和psmatch命令区别联系 | ATE/ATU/ATT实际计算原理

这里主要是做个学习记录。 参考链接来自: https://www.ssc.wisc.edu/sscc/pubs/stata_psmatch.htm 很经典的一篇帖子 以下主要是对用到的stata命令和过程做个记录 (以下内容需要一点点的psm基础,包括ate、atu、att,psm处理流程等…

为每个项目单独设置node版本

如果你同时开发多个项目,每个项目所需的node版本又不相同,那么你需要为每个项目单独设置node版本。 node官网上介绍了几种版本管理工具,有:n,nodenv, nvm。 Installing Node.js via Package Manager node…

【创作纪念日】时间如梭,梭梭催我进步,在CSDN这5年,收获、成长与荣誉并存。

1、引言 小屌丝:鱼哥, 恭喜啊。 小鱼:啥情况, 给我整蒙圈了。 小屌丝:你的朋友圈啊。 小鱼:我的朋友圈咋了, 你看好哪个了? 嘿…嘿…嘿…嘿… 小屌丝:CSDN 创作5周年纪念…

【Power BI 技巧】如何生成动态指标散点图

前言 本文介绍如何在Power BI中创建动态散点图,可以自由切换X轴和Y轴的指标。 数据下载: 使用的是CSDN后台的单篇文章分析数据,在“作品数据”页点击“导出数据”。 因为都是累计值,所以用了两天的数据,手动添加…

python+vue面向大学生的校内交友推荐系统

基于Python语言、django框架、B/S架构、Mysql数据库设计并实现了面向高校学生的校内交友推荐系统。系统主要包括用户、活动信息、活动分类、交友信息、互助信息、热点新闻、校园广场等功能模块。 网络交友较之其它交友方式更加经济、安全、健康。现在的上网条件非常的便利&…

深度学习进阶篇-国内预训练模型[6]:ERNIE-Doc、THU-ERNIE、K-Encoder融合文本信息和KG知识;原理和模型结构详解。

【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化…

计算机网络第一章——计算机体系结构(上)

提示:剑未佩妥,出门已是江湖;酒尚余温,入口不识乾坤,愿历尽千帆,归来仍是少年。 文章目录 1.1.1 概念和功能计算机网络的概念计算机网络的功能计算机网络的发展——第一阶段第二阶段——三级结构第三阶段—…

生活-考驾照2

昨日已通过科目一,接下来,向着科目二出发!!! 考试注意事项 就考前一周死命刷题,至少一天有三次93以上的记录,我也就最后一天达到90,之前一直马路杀手刷题,我就在网页版…

泰国这场发布会,UTONMOS元宇宙游戏玩出炫酷新花样

Sensor Tower 最近发布的一项报告显示,全球元宇宙 App 下载量在 2022 年H1 达到 1.7 亿次,其中游戏达到了 1.1 亿次,占比 67.3%。在营收方面,元宇宙 App 在 H1 共获得 6.5 亿美元收入,游戏占 94%,达到 6.4 …

中低压母线室弧光保护装置在水电站的应用

摘要:本文介绍了电弧光保护在水电站的配置及应用,提供给相关人员参考。 关键词:水电站;开关柜;电弧光 0前言 电弧光是由于发生相间短路或接地短路时空气电离而形成的。在我国电力系统中开关柜内部电弧光故障时有发生…