Luga Lee
作者Luga Lee·2023-09-21 14:06
系统架构师·None

Java 生态领域相关发展里程碑事件:Java 21 全新版本发布

字数 5497阅读 1132评论 0赞 5

今天我们来聊一下 Java 生态领域相关发展里程碑事件 - Java 21 全新版本发布。

Java 21 背景描述

在 2023 年 9 月 19 日举行的盛大发布活动庆祝了 Java 21 的正式发布,这也是 Java 17 之后的最新长期支持(LTS)版本。Oracle 承诺提供至少五年的免费升级支持,直到 2028 年 9 月,并将付费支持延长至 2031 年 9 月,为用户提供更长久的支持。

在这个值得庆祝的发布活动中,Java 21 带来了一系列令人振奋的新功能和增强,进一步巩固了 Java 作为一门领先的编程语言的地位。这个版本的长期支持意味着开发人员可以在未来几年内享受到稳定性、安全性和兼容性方面的保障。

Java 21 :大家团结一致的成果

在 Java 21 中,共解决了 2,585 个 JIRA 问题,其中 1,868 个问题由 Oracle 社区完成,717 个问题由 Java 社区的其他成员贡献。在上述 2 大社区技术工作中的共同的努力、参与下使得 Java 21 的发布成为可能

除此之外,亚马逊、ARM、Azul、谷歌、华为、IBM、英特尔、ISCAS、红帽、Rivos、SAP 和腾讯等组织的开发人员,他们也为 Java 21 做出了显著的贡献。他们的专业知识和努力为 Java 21 中的修复工作做出了重要贡献。

此外,那些来自小型组织,如 Bellsoft 和 Loongson,以及独立开发人员,也同样贡献了自己的绵薄之力。尽管规模较小,但他们的贡献却占 Java 21 修复程序总量的 8%。

同时,参与 OpenJDK 质量外联计划的自由开源软件(FOSS)项目也参与了此次版本的活动建设。他们提供了宝贵的反馈和测试,帮助提高了 Java 21 早期访问构建的质量。

所有这些贡献者的合作和努力使得 Java 21成为了一个集众多专业人士和组织之力的成果,为 Java 技术的发展和创新作出了重要贡献。

如下为这些组织在 Java 21 开发方面的贡献情况,具体可参考:

这些数据展示了各个组织在 Java 21 开发中的赞助和贡献。通过他们的支持和努力,Java 的发展得以推进,问题得到了解决,为用户提供了更稳定、可靠和功能丰富的 Java 版本。

Java 21 版本的核心“亮点”

Java 21 作为一个里程碑式的版本,带来了许多令人振奋的亮点和创新,具体可参考如下所示:

1、虚拟线程的完整实现及引入

作为 Java 历史上最重要的创新之一,虚拟线程的实现已经完成。这项创新为开发人员提供了更高效、更灵活的并发编程方式,通过在底层管理线程的执行,提高了应用程序的性能和可伸缩性。

2、Amber 项目的新语言功能

Java 21 确定了 Amber 项目中的两个新语言功能。首先是记录模式,它提供了一种简化和更直观的方式来定义不可变的数据类型。其次是切换的模式匹配,它改进了模式匹配语法,使得编写更清晰、更简洁的条件分支代码成为可能。

3、SequencedCollection接口引入

Java 21 引入了一个新的、方便的界面 SequencedCollection,它允许开发人员直接访问有序集合中的第一个和最后一个元素。这项功能提供了更便捷的操作方式,使得对有序集合的处理更加高效和简单。

4、预览功能的引入

Java 21 中引入了两个期待已久的功能(目前作为预览功能)。首先是字符串模板,它提供了一种简洁和方便的方式来处理和格式化字符串,提高了代码的可读性和可维护性。其次是未命名模式和变量,它简化了模式匹配的语法,使得代码编写更加简洁和灵活。

Java 21 的 新功能特性

据官方所述,除了数千个性能、稳定性和安全更新之外,Java 21 还引入了数十个新功能和增强功能。其中有 15 个增强功能被认为足够重要,以至于它们被定义为自己的 JDK 增强提案(JEP),涵盖了六个预览功能和一个孵化器功能。

JEP 预览功能是完全指定并实现了 Java SE 平台的语言或虚拟机功能,但它们并不是永久性的。它们在 JDK 的功能版本中提供,以便开发人员可以根据实际世界的使用情况提供反馈,直到它们在未来版本中成为永久性功能。这也为工具供应商提供了在最终确定 Java SE 标准之前支持这些功能的机会。

JEP 孵化器模块允许将非最终的 API 和非最终工具交给开发人员和用户,以收集反馈并最终提高 Java 平台的质量。

Java 21 提供的 15 个 JEP 功能可以分为六个类别,与关键的长期 Java 技术项目和硬件支持相对应。

对于上述 15 个 JEP 功能的具体细节和分类,请参阅相关文档和 JDK 文档。这些功能的引入将进一步丰富 Java平台,提供更多的工具和功能,以满足开发人员和用户的需求,并推动 Java 技术的发展。

Project Loom

1、 JEP 444: Virtual Threads 虚拟线程

JEP目标:
使以简单的每请求线程样式编写的服务器应用程序能够以近乎最佳的硬件利用率进行扩展。
启用使用java.lang.Thread API的现有代码以最小的更改采用虚拟线程。
使用现有的JDK工具轻松排除、调试和分析虚拟线程。
涉及:
[JDK 20] JEP 436:虚拟线程(第2次预览)
[JDK 19] JEP 425:虚拟线程(预览)
价值:
通过引入虚拟线程来加快应用程序开发生产力,例如针对云环境的应用程序,虚拟线程是轻量级线程,可以大大减少编写、维护和观察高吞吐量并发应用程序的工作量。

2、JEP 446: Scoped Values (Preview) 范围值(预览)

JEP目标:
允许在线程内部和线程之间共享不可变数据。
相关:
[JDK 20] JEP 429:范围值(孵化器)
价值:
易于使用—提供一个编程模型,用于在线程内和与子线程共享数据,以简化有关数据流的推理。
可理解性—使共享数据的生命周期从代码的语法结构中可见。
稳健性—确保调用者共享的数据只能由合法的被调用者检索。
性能—将共享数据视为不可变的,以便允许大量线程共享,并实现运行时优化。

3、JEP 453: Structured Concurrency (Preview)

JEP目标:
通过引入结构化并发的API来简化并发编程。
促进一种并发编程风格,可以消除取消和关机引起的常见风险,例如线程泄漏和取消延迟。
提高了并发代码的可观察性。
相关:
[JDK 19] JEP 428:结构化并发(孵化器)
[JDK 20] JEP 437:结构化并发(第二孵化器)
价值:
通过引入结构化并发的API来简化并发编程。这简化了错误处理和取消,提高了可靠性,并增强了可观察性。

Project Amber

1、JEP 430: String Templates (Preview)

JEP目标:

通过轻松表达包含运行时计算的值的字符串,简化了Java程序的编写。
增强混合文本和表达式的表达式的可读性,无论文本适合单个源行(如字符串文字),还是跨越多个源行(如文本块)。
通过支持模板及其嵌入式表达式的值的验证和转换,提高了Java程序的安全性,这些程序从用户提供的值组成字符串并将其传递给其他系统(例如,为数据库构建查询)。
通过允许Java库定义字符串模板中使用的格式语法来保持灵活性。
简化了接受用非Java语言(例如SQL、XML和JSON)编写的字符串的API的使用。
允许创建从字面文本和嵌入式表达式计算的非字符串值,而无需通过中间字符串表示。
价值:
根据Amber项目的目标,字符串模板旨在使Java编程语言更可读、可写和可维护。

2、JEP 440: Record Patterns

JEP目标:通过将模式匹配扩展到记录类的去结构实例来增强Java编程语言,从而实现更复杂的数据查询。
添加嵌套模式,启用更多可组合的数据查询。
相关:
[JDK 19] JEP 405:记录模式(预览)
[JDK 20] JEP 432:记录模式(第二次预览)
价值:
通过扩展模式匹配来表达更复杂、可组合的数据查询,使Java编程语言更具生产力。

3、JEP 441: Pattern Matching for switch

JEP目标:
通过允许模式出现在案例标签中,扩展了开关表达式和语句的表达性和适用性。
允许在需要时放松切换的历史性零敌意。
通过要求模式开关语句覆盖所有可能的输入值来提高开关语句的安全性。
确保所有现有的交换机表达式和语句继续编译,不进行任何更改,并使用相同的语义执行。
相关:
[JDK 17] JEP 406:开关的模式匹配(预览)
[JDK 18] JEP 420:开关的模式匹配(第2次预览)
[JDK 19] JEP 427:开关的模式匹配(第3次预览)
[JDK 20] JEP 433:开关的模式匹配(第4次预览)
价值: 通过使其更具语义,提高Java编程语言的生产力,以便可以简洁安全地表达复杂的面向数据的查询。

4、JEP 443: Unnamed Patterns and Variables (Preview)

JEP目标:
使用未命名模式增强Java语言,这些模式匹配记录组件而不说明组件的名称或类型,以及未命名的变量,这些变量可以初始化但不能使用。两者都用下划线字符表示,_。
价值:
通过避免不必要的嵌套模式来提高记录模式的可读性。
通过识别必须声明(例如,在catch子句中)但不会使用的变量,提高所有代码的可维护性。

5、JEP 445: Unnamed Classes and Instance Main Methods (Preview)

JEP目标: 为Java提供平稳的管道,以便教育工作者可以循序渐进地引入编程概念。
帮助学生以简洁的方式编写基本程序,并随着技能的增长优雅地发展他们的代码。
减少编写脚本和命令行实用程序等简单程序的仪式。
没有引入单独的Java初学者方言。
不引入单独的初学者工具链;学生程序应使用编译和运行任何Java程序的相同工具进行编译和运行。
价值:
通过减少样板和仪式来发展Java语言,以便学生可以编写他们的第一个程序,而无需理解为大型程序设计的语言功能。

由于篇幅原因,其他的功能特性,暂不在本地赘述,若有兴趣,大家可参考官方所示,具体:https://jdk.java.net/21/release-notes

综上所述,

Java 21 作为新的 LTS 版本,引入了 Java 历史上最重要的变化之一,即最终确定了虚拟线程(Virtual Threads),这将极大地简化高度可扩展的服务器应用程序的实现。

此外,Java 21 还引入了一些具有重要意义的语言功能,包括记录模式(Records)、模式匹配的开关语句(Switch 的模式匹配)、序列集合(Sequences)、字符串模板以及未命名模式和变量(后两者仍处于预览阶段)。这些功能使得 Java 语言更具表现力和健壮性。

此外,未命名的类和实例主方法(也处于预览阶段)使得程序员更容易开始使用 Java 语言,而不必在一开始就理解类和静态方法等复杂的概念和结构。

这些新功能的引入为开发人员提供了更多的工具和选择,使他们能够更轻松地编写高效、可扩展和易于理解的代码。Java 21 的发布标志着 Java 语言持续发展和改进的重要里程碑,并为未来的应用程序开发提供了更多的可能性。

Java 21 性能怎样?

这里,我们主要从宏观角度上进行对比分析,具体涉及微基准测试和垃圾回收策略等 2 大角度展开,具体如下:

1、微基准测试

为了评估不同变化对约束流性能的影响,将从分数导演微基准开始。这些基准经常被使用,以确定约束流求解器的各种改进对性能的影响。它们专注于求解器的分数计算部分,而不运行整个求解器。

这些微基准使用了Java Microbenchmark Harness(JMH)进行实现,并在多个 Java 虚拟机(JVM)分支中运行,并且经过了充分的预热。这使我们对结果有很高的信心。实际上,这些数字的误差范围仅为 ±2%。

以下是 Java 21 与 Java 17 在约束流性能方面的比较结果:

2、 ParallelGC 仍然是求解器的最佳 GC

下图展示了 G1GC(基线)和 ParallelGC 之间的性能差异。由于 Java 21 引入了代级 ZGC,这是另一种旨在实现低延迟的垃圾收集器,我们认为将其纳入比较范围也会非常有意义。

我们多年来发现 ParallelGC 是求解 器的最佳 垃圾收集器。 这并不奇怪,因为 ParallelGC 专为高吞吐量而设计,而求解器完全受到CPU约束。 相比之下,G1 GC(默认的垃圾收集器)则专为低延迟而设计,两者之间存在显著差异。 然而,情况发生了变化,我们偶尔需要对我们的假设进行挑战。 Parallel GC 仍然是求解器的最佳垃圾收集器吗?

答案是显而易见的。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

5

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广