文章目录

    • 前言
    • JDK 20发布
    • JDK20下载
    • JDK 20新特性
      • 矢量API
      • 虚拟线程(第二次优化)
      • 结构化并发
      • Scoped values 作用域值
      • 记录模式(第二次优化)
      • 外部函数和内存API
      • switch语句和表达式的模式匹配
    • 写在最后

前言

JDK20又来了!相信很多开发者和我一样都还在用JDK8稳定版。JDK8是最后一个免费商业化版本,很多公司也是因为这个原因不愿意升级。但是作为一个资深搬砖人,我们也还是需要了解新版本的特性。废话不多说,我们开始今天的主题——JDK 20新特性。

JDK 20发布

3月21日,甲骨文公司发布了最新版JDK20。JDK 20是一个仅支持六个月的短期版本,它是2022年9月20日发布的JDK 19 的迭代产品。值得注意的是JDK 21也将于9月发布,不过JDK21会是一个长期支持(LTS)版本。目前,Java 20已经可以从官网下载使用。

JDK20下载

https://jdk.java.net/20/

JDK 20新特性

相信不少同学还在JDK8吧,但是JDK20我们也要了解它的新特性。

矢量API

矢量API是引入一种API来表达矢量计算,这些计算在运行时可靠地编译为支持的CPU架构上的最佳矢量指令。这将实现优于等效标量计算的性能。

虚拟线程(第二次优化)

虚拟线程是轻量级线程,可以减少编写、维护和观察高吞吐量并发应用程序的工作量。在JDK19中已经少量API更改和对ThreadGroup的降级。在JDK20中将从根本上改变Java应用程序的扩展方式。

结构化并发

结构化并发由一个API来简化多线程编程,并将在不同线程中运行的多个任务视为单个工作单元。简化了错误处理和消除,提高了可靠性和可观察性。自从在JDK 19中孵化以来,唯一的变化是StructuredTaskScope已经更新,以支持在任务范围中创建的线程对范围值的继承。在JDK20中正在重构此功能。

Scoped values 作用域值

Scoped values是一种处于开发阶段的API,可以在线程内和线程间共享不可变的数据。与线程局部变量相比,这些变量更可取,尤其是在使用大量虚拟线程时。作用域值允许在大型程序中的组件之间安全有效地共享数据,而无需使用方法参数。目标包括易用性、可理解性、健壮性和性能。

记录模式(第二次优化)

在JDK20中记录模式通过解构记录值的模式增强了Java编程语言。可以嵌套记录模式和类型模式,以实现声明性、强大且可组合的数据导航和处理形式。目标包括扩展模式匹配以表达更复杂、可组合的数据查询,并且不更改类型模式的语法或语义。

外部函数和内存API

外部函数和内存API引入了一种API,Java程序可以通过该API在Java运行时之外与代码和数据进行互操作。API使Java程序能够调用本机库并处理本机数据,而没有JNI(Java native Interface)的脆弱性和危险性。JDK 19之后添加的改进包括MemorySegment和MemoryAddress抽象的统一,增强的MemoryLayout层次结构,以及将MemorySession拆分为Arena和SegmentScope,以促进跨维护边界的段共享。

switch语句和表达式的模式匹配

switch语句和表达式的模式匹配可以实现复杂的面向数据的查询的简洁和安全的表达式。在JDK20中将实现与记录模式的持续共同发展,允许根据经验和反馈进行持续改进。本次更新switch模式匹配的主要变化包括switch标签的简化语法,以及对switch语句和表达式中泛型模式和记录模式的类型参数推断的支持。此外,如果在运行时没有应用开关标签,则枚举类上的穷举切换现在会抛出MatchException,而不是不兼容ClassChangeError。

写在最后

JDK20在19的基础上更新了结构化并发、记录模式、部函数和内存API等,也加入了一些新的特性。但是本版本官方只短期支持6个月,下个稳定版本JDK21会在今年9月发布。哈哈,不得不说甲骨文公司对于JDK的商业化更新还是比较执着。

路漫漫其修远兮,吾将上下而求索
有兴趣的小伙伴也可以加我:
订阅号 ‘架构集结号’
知识星球 ‘Coding社区’