最近,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
- JEP 432: Record Patterns (Second Preview): Enhances the Java language by allowing users to nest record patterns and type patterns to create a powerful, declarative, and composable form of data navigation and processing. This helps increase developer productivity by enabling them to extend pattern matching to allow for more sophisticated and composable data queries.
- JEP 433: Pattern Matching for Switch (Fourth Preview): By extending pattern matching to switch, an expression can be tested against a number of patterns—each with a specific action—so that complex data-oriented queries can be expressed concisely and safely. Expanding the expressiveness and applicability of switch expressions and statements helps increase developer productivity.
Project Loom Preview/Incubator Features
- JEP 429: Scoped Values (Incubator): Enables the sharing of immutable data within and across threads, which are preferred to thread-local variables – especially when using large numbers of virtual threads. This increases ease-of-use, comprehensibility, robustness, and performance.
- JEP 436: Virtual Threads (Second Preview): Significantly streamline the process of writing, maintaining, and observing high-throughput, concurrent applications by introducing lightweight virtual threads to the Java Platform. By enabling developers to easily troubleshoot, debug, and profile concurrent applications with existing JDK tools and techniques, virtual threads helps accelerate application development.
- JEP 437: Structured Concurrency (Second Incubator): Simplifies multithreaded programming by treating multiple tasks running in different threads as a single unit of work. This helps development teams streamline error handling and cancellation, improve reliability, and enhance observability.
Project Panama Preview Features
- JEP 434: Foreign Function & Memory API (Second Preview): Enables Java programs to interoperate with code and data outside of the Java runtime. By efficiently invoking foreign functions (i.e., code outside the Java Virtual Machine [JVM]), and by safely accessing foreign memory (i.e., memory not managed by the JVM), this feature enables Java programs to call native libraries and process native data without requiring the Java Native Interface. This increases ease-of-use, performance, and safety.
- JEP 438: Vector API (Fifth Incubator): Expresses vector computations that reliably compile at runtime to vector instructions on supported CPU architectures. This increases performance compared to equivalent scalar computations.
JDK20
蕴含 7 个JEP
,曾经数百小性能点的变动。
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
的指标是为用户提供简洁易用且与平台无关的表白范畴宽泛的向量计算。
JDK21
打算于 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
。此段来自作者:
相干 URL
甲骨文对于 JDK20
的发布新闻Oracle Releases Java 20
: https://www.oracle.com/news/announcement/oracle-releases-java…
OpenJDK
的 JDK20
下载页面:https://jdk.java.net/20/
OpenJDK
的 JDK21
开发预览版本下载页面:https://jdk.java.net/21/