乐趣区

关于jdk:JDK20正式发布了GA版本短期维护支持以及JDK21预览

最近,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 patternsType 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 中的 GoroutineErlang 中的过程。虚构线程防止了上下文切换的额定消耗,兼顾了多线程的长处, 简化了高并发程序的简单,能够无效缩小编写、保护和察看高吞吐量并发应用程序的工作量

结构化并发 (Structured Concurrency) 进入第 2 孵化阶段

JDK 19 引入了结构化并发,这是一种多线程编程办法,目标是为了通过结构化并发 API 来简化多线程编程,并不是为了取代 java.util.concurrent

结构化并发将不同线程中运行的多个工作视为单个工作单元,从而简化错误处理、进步可靠性并加强可察看性。也就是说,结构化并发保留了单线程代码的可读性、可维护性和可察看性。

向量 API (Vector API) 进入第 5 孵化阶段

向量计算由对向量的一系列操作组成。向量 API 用来表白向量计算,该计算能够在运行时牢靠地编译为反对的 CPU 架构上的最佳向量指令,从而实现优于等效标量计算的性能。向量 API 的指标是为用户提供简洁易用且与平台无关的表白范畴宽泛的向量计算。

JDK21

打算于 2023 年 9 月公布一个 GA 和下一个 LTS 版本,目前 JDK 21Proposed to Target 有两个 JEP

JEP 430,字符串模板(预览版),一种 JEP 类型的个性,提议应用字符串模板来加强 Java 编程语言,字符串模板相似于字符串字面量,但蕴含在运行时合并到字符串模板中的嵌入式表达式。该个性已被归类为 JDK 21Proposed to Target,但尚未正式颁布审查日期。

JEP 431,序列汇合,提议引入“一个组能新示意汇合概念的接口,这些汇合的元素依照定义良好的序列或顺序排列,作为汇合的构造属性。”其动因是因为汇合框架(Collections Framework)中不足定义良好的排序和对立操作集。该个性已被归类为 JDK 21Proposed 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 草案 8278252JDK 打包和装置指南,一个信息性的 JEP,倡议提供在 macOS、Linux 和 Windows 上创立 JDK 安装程序的指南,以升高不同 JDK 提供商在 JDK 装置之间发生冲突的危险。其目标是通过正式化装置目录名称、包名称以及可能导致抵触的安装程序的其余元素,在装置 JDK 的更新发行版时提供更好的体验。

咱们预计 Oracle 将很快开始为 JDK 21 提供更多的JEP

此段来自作者:

相干 URL

甲骨文对于 JDK20 的发布新闻Oracle Releases Java 20 : www.oracle.com/news/announ…

OpenJDKJDK20 下载页面:jdk.java.net/20/

OpenJDKJDK21 开发预览版本下载页面:jdk.java.net/21/

退出移动版