最近,Oracle发布了JDK20
,相比对于Java开发者来说,JDK
的发版是比较收关注的事情了,小简也来和大家一起了解了解JDK20
发生了什么变化呢?
首先,
JDK20
是一个短周期版本,有6个月的维护时间,据开发者计划,下一个LTS
也就长期维护版本将会在2023年9月份发布到来,也就是JDK21
了。
目前JDK21
也是推出了早期预览版本。
JDK 20
提供了来自 OpenJDK
项目 Amber
的语言改进(Switch
的记录模式和模式匹配),OpenJDK
巴拿马项目的增强功能,以互连Java
虚拟机(JVM
)和本机代码(外部函数和内存API
和矢量API
),以及与 Project Loom
相关的功能(作用域值、虚拟线程和结构化并发),这些功能将大大简化编写、维护和观察高吞吐量并发应用程序的过程。
Oracle
通过可预测的发布计划每六个月发布一次新的Java
功能。这种节奏提供了源源不断的创新,同时不断改进平台的性能、稳定性和安全性,有助于提高Java
在各种规模的组织和行业中的普遍性。
Language Updates and Improvements
Project Loom Preview/Incubator Features
Project Panama Preview Features
JDK20
包含7个JEP
,已经数百小功能点的变化。
JEP | Language Updates and Improvements |
---|---|
432 | Record Patterns (Second Preview) |
433 | Pattern Matching for Switch (Fourth Preview) |
429 | Scoped Values (Incubator) |
436 | Virtual Threads (Second Preview) |
437 | Structured Concurrency (Second Incubator) |
434 | Foreign Function & Memory API (Second Preview) |
438 | Vector API (Fifth Incubator) |
看不懂英文没关系,因为我也看不懂,只是去官方网站上整理下来的资料,我们可以翻译成中文再去查阅。
此段来自
程序员DD
大佬文章:作用域值(Scoped Values)进入孵化阶段
引入
Scoped Values
,它可以在线程内和线程间共享不可变数据。它们优于线程局部变量,尤其是在使用大量虚拟线程时。记录模式 (Record Patterns) 进入第 2 预览阶段
Record Patterns
可对record
的值进行解构,Record patterns
和Type patterns
通过嵌套能够实现强大的、声明性的、可组合的数据导航和处理形式。switch 模式匹配 (Pattern Matching for switch) 进入第 4 预览阶段
用
switch
表达式和语句的模式匹配,以及对模式语言的扩展来增强Java
编程语言。将模式匹配扩展到switch
中,允许针对一些模式测试表达式,这样就可以简明而安全地表达复杂的面向数据的查询。外部函数和内存
API
(Foreign Function & Memory API) 进入第 2 预览阶段引入一个
API
,通过它,Java
程序可以与Java
运行时之外的代码和数据进行互操作。通过有效地调用外部函数,以及安全地访问外部内存,该API
使Java
程序能够调用本地库并处理本地数据,而不会像JNI
那样有漏洞和危险。虚拟线程 (Virtual Threads) 进入第 2 预览阶段
为
Java
引入虚拟线程,虚拟线程是JDK
实现的轻量级线程,它在其他多线程语言中已经被证实是十分有用的,比如Go
中的Goroutine
、Erlang
中的进程。虚拟线程避免了上下文切换的额外耗费,兼顾了多线程的优点,简化了高并发程序的复杂,可以有效减少编写、维护和观察高吞吐量并发应用程序的工作量。结构化并发 (Structured Concurrency) 进入第 2 孵化阶段
JDK 19
引入了结构化并发,这是一种多线程编程方法,目的是为了通过结构化并发API
来简化多线程编程,并不是为了取代java.util.concurrent
。结构化并发将不同线程中运行的多个任务视为单个工作单元,从而简化错误处理、提高可靠性并增强可观察性。也就是说,结构化并发保留了单线程代码的可读性、可维护性和可观察性。
向量 API (Vector API) 进入第 5 孵化阶段
向量计算由对向量的一系列操作组成。向量
API
用来表达向量计算,该计算可以在运行时可靠地编译为支持的CPU
架构上的最佳向量指令,从而实现优于等效标量计算的性能。向量API
的目标是为用户提供简洁易用且与平台无关的表达范围广泛的向量计算。
计划于 2023 年 9 月发布一个 GA
和下一个 LTS
版本,目前JDK 21
的 Proposed to Target 有两个 JEP
。
JEP 430
,字符串模板(预览版),一种 JEP
类型的特性,提议使用字符串模板来增强 Java 编程语言,字符串模板类似于字符串字面量,但包含在运行时合并到字符串模板中的嵌入式表达式。该特性已被归类为 JDK 21
的 Proposed to Target,但尚未正式公布审查日期。
JEP 431
,序列集合,提议引入“一个组能新表示集合概念的接口,这些集合的元素按照定义良好的序列或顺序排列,作为集合的结构属性。”其动因是由于集合框架(Collections Framework)中缺乏定义良好的排序和统一操作集。该特性已被归类为 JDK 21
的 Proposed to Target,但尚未正式公布审查日期。
然后在InfoQ
中找到如下资料:
我们可以根据一些
JEP
草案和候选者推测哪些额外的JEP
有可能被纳入JDK 21
。由红帽的杰出工程师 Andrew Haley 和 Andrew Dinn 提交的 JEP 草案 8303358,作用域值(预览版)改进了即将发布的 JDK 429 中提供的 JEP 20,作用域值(孵化器)。以前称为*范围局部变量(孵化器),*在 Project Loom 的支持下,此功能建议在线程内和线程之间共享不可变数据。这优先于线程局部变量,尤其是在使用大量虚拟线程时。虽然该草案尚未达到候选状态,但描述明确指出该 JEP 将添加到 JDK 21 中。
JEP草案8277163,Value Objects(预览版)是Project Valhalla赞助的JEP的一项功能,它建议创建值对象 - 指定其实例行为的无标识值类。此草案与 JEP 401,基元类(预览版)相关,该类仍处于候选状态。
JEP 435,异步堆栈跟踪 VM API,一种功能 JEP 类型,建议定义一个有效的 API,用于从信号处理程序获取异步调用跟踪,以便从具有 Java 和本机帧信息的信号处理程序进行分析。
JEP 401,基元类(预览版)在Valhalla项目的主持下,引入了开发人员声明的基元类 - 特殊类型的值类 - 如上述值对象(预览版)JEP草案中所定义 - 定义新的基元类型。
JEP草案8301034,密钥封装机制API是JEP类型的一种功能,建议:满足标准密钥封装机制(KEM)算法的实现;通过更高级别的安全协议满足 KEM 的使用案例;并允许服务提供商插入 Java 或 KEM 算法的本机实现。此草案最近进行了更新,包括一项重大更改,该更改删除了
DerivedKeyParameterSpec
类,转而将字段放在**封装(int from, int to, String algorithm)
** 方法的参数列表中。JEP 草案8283227,JDK 源代码结构,一种信息性的 JEP 类型,描述了 JDK 存储库中 JDK 源代码和相关文件的整体布局和结构。本 JEP 建议帮助开发人员适应 JDK 201 中提供的 JEP 9 模块化源代码中所述的源代码结构。
JEP Draft 8280389,ClassFile API,建议提供一个用于解析、生成和转换 Java 类文件的 API。该JEP最初将作为JDK中Java字节码操作和分析框架ASM的内部替代品,并计划将其作为公共API开放。Oracle的Java语言架构师Brian Goetz将ASM描述为“一个带有大量遗留包袱的旧代码库”,并提供了有关该草案将如何演变并最终取代ASM的背景信息。
JEP 草案 8278252,
JDK
打包和安装指南,一个信息性的JEP
,建议提供在macOS
、Linux 和 Windows 上创建JDK
安装程序的指南,以降低不同JDK
提供商在 JDK 安装之间发生冲突的风险。其目的是通过正式化安装目录名称、包名称以及可能导致冲突的安装程序的其他元素,在安装JDK
的更新发行版时提供更好的体验。我们预计
Oracle
将很快开始为JDK 21
提供更多的JEP
。此段来自作者:
甲骨文关于JDK20
的发布新闻Oracle Releases Java 20
: https://www.oracle.com/news/announcement/oracle-releases-java-20-2023-03-21/
OpenJDK
的JDK20
下载页面:https://jdk.java.net/20/
OpenJDK
的JDK21
开发预览版本下载页面:https://jdk.java.net/21/