JDK21:Java21的新特性

这篇具有很好参考价值的文章主要介绍了JDK21:Java21的新特性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

定于9月推出的Java21计划现在包括一个关键封装机制API和32位Windows端口的弃用。
JDK21:Java21的新特性
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中对象头的大小,以减少堆大小。文章来源地址https://www.toymoban.com/news/detail-467615.html

到了这里,关于JDK21:Java21的新特性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Java_JDK8到JDK21各版本发行时间及重要特性

    2022年Spring6和SpringBoot3相继推出,在此之前,Java社区一直是\\\"新版任你发,我用Java 8\\\",不管新版本怎么出,很少有人愿意升级。 这一次,Spring 直接来了个大招,SpringBoot3和Spring6的最低依赖就是JDK17!跨过 JDK 8-16,直接升级到 JDK 17。那么为什么是 JDK 17呢? 为什么是JDK17这么多新

    2024年01月19日
    浏览(13)
  • 【从零开始学Java第64期】JDK8 关于日期时间的新特性

    【从零开始学Java第64期】JDK8 关于日期时间的新特性

    本系列为:从零开始学Java,为千锋教育资深Java教学老师独家创作 致力于为大家讲解清晰Java相关知识点,含有丰富的代码案例及讲解。如果感觉对大家有帮助的话,可以【点个关注】持续追更~ 有技术类问题,也欢迎大家和我们交流讨论! 在上一篇文章中本系列内容给大家讲

    2024年02月07日
    浏览(12)
  • 【Java基础-JDK21新特性】它发任它发,我用java8

    【Java基础-JDK21新特性】它发任它发,我用java8

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月08日
    浏览(11)
  • JDK8到JDK17有哪些吸引人的新特性?

    作者:京东零售 刘一达 2006年之后SUN公司决定将JDK进行开源,从此成立了OpenJDK组织进行JDK代码管理。任何人都可以获取该源码,并通过源码构建一个发行版发布到网络上。但是需要一个组织审核来确保构建的发行版是有效的, 这个组织就是JCP(Java Community Process)。2009年,SUN公

    2023年04月18日
    浏览(16)
  • JDK17新特性之--JDK9到JDK17 String 新增的新方法

    JDK17新特性之--JDK9到JDK17 String 新增的新方法

    JDK9之后对String底层存储数据结构进行了重大的修改 1 ,同步也增加了许多新的方法,主要有Text Blocks、chars()、codePoints()、describeConstable()、formatted()、indent()、isBlank()、isEmpty()、lines()、repeat()、strip()、stripLeading()、stripIndent()、stripTrailing()、translateEscapes(),接下来就逐一看看每个

    2024年02月04日
    浏览(12)
  • JDK21新特性

    JDK21新特性

    JDK8新特性 JDK9新特性 JDK10新特性 JDK11新特性 JDK12新特性 JDK13新特性 JDK14新特性 JDK15新特性 JDK16新特性 JDK17新特性 JDK18新特性 JDK19新特性 JDK20新特性 JDK21新特性 JDK 21 于 2023 年 9 月 19 日 发布,这是一个非常重要的版本,里程碑式。 JDK21 是 LTS(长期支持版),至此为止,目前有

    2024年02月22日
    浏览(11)
  • JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)

    JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)

    1.1 关于Java8新特性简介 Java 8 (又称为 JDK 8或JDK1.8) 是 Java 语言开发的一个主要版本。 Java 8 是oracle公司于2014年3月发布,可以看成是自Java 5 以来 最具革命性 的版本。Java 8为Java语言、编译器、类库、开发工具与JVM带来了大量新特性。 特性: 速度更快 代码更少(增加了新的语法

    2024年02月05日
    浏览(12)
  • JDK8,JDK11,JDK17,JDK21及中间版本主要更新特性

    JDK8,JDK11,JDK17,JDK21及中间版本主要更新特性

    官方地址: https://www.oracle.com/java/technologies/java-se-support-roadmap.html 从上图可以很清晰得可以看出,JDK7,JDK8,JDK11,JDK17,JDK21是长期维护的版本。从目前来看,JDK8到2023年已经有将近10年的历史了,大多数依据JDK8的相关技术内容已经很成熟了,但是大家也看到,JDK在不断地迭代,JD

    2024年02月21日
    浏览(12)
  • JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)

    JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)

    新的语法结构,勾勒出了 Java 语法进化的一个趋势,将开发者从 复杂、繁琐 的低层次抽象中逐渐解放出来,以更高层次、更优雅的抽象,既 降低代码量 ,又避免意外编程错误的出现,进而提高代码质量和开发效率。 1.1 Java的REPL工具: jShell命令 JDK9的新特性 Java 终于拥有了

    2024年02月06日
    浏览(14)
  • 【收藏】35个JDK 21新特性(含示例代码)

    2024年威哥携三位兄弟,Mask、强哥、索尓一起探索Java JDK21 LTS版,JDK 21 带来了一些令人兴奋的新特性和改进,总结了一些自己的笔记,分享给大家,本文将介绍其中一些重要的内容,并提供相应的示例代码以帮助读者更好地理解,阅读全文需要花费你10分钟,收藏起来肯定有

    2024年04月15日
    浏览(6)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包