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

本文涉及的产品
全球加速 GA,每月750个小时 15CU
简介: 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 HaleyAndrew Dinn 提交的 JEP 草案 8303358,作用域值(预览版)改进了即将发布的 JDK 429 中提供的 JEP 20,作用域值(孵化器)。以前称为范围局部变量(孵化器),Project Loom 的支持下,此功能建议在线程内和线程之间共享不可变数据。这优先于线程局部变量,尤其是在使用大量虚拟线程时。虽然该草案尚未达到候选状态,但描述明确指出该 JEP 将添加到 JDK 21 中。

JEP草案8277163Value 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 8280389ClassFile 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

此段来自作者:



相关文章
|
2月前
|
缓存 Java Maven
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
如何解决Java项目中因JDK版本不匹配导致的编译错误,包括修改`pom.xml`文件、调整项目结构、设置Maven和JDK版本,以及清理缓存和重启IDEA。
62 1
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
|
2月前
|
Java 关系型数据库 MySQL
【编程基础知识】Eclipse连接MySQL 8.0时的JDK版本和驱动问题全解析
本文详细解析了在使用Eclipse连接MySQL 8.0时常见的JDK版本不兼容、驱动类错误和时区设置问题,并提供了清晰的解决方案。通过正确配置JDK版本、选择合适的驱动类和设置时区,确保Java应用能够顺利连接MySQL 8.0。
265 1
|
2月前
|
Java 关系型数据库 开发工具
idea创建不了spring2.X版本,无法使用JDK8,最低支持JDK17 , 如何用idea创建spring2.X版本,使用JDK8解决方案
本文提供了解决方案,如何在IDEA中创建Spring 2.X版本的项目并使用JDK8,尽管Spring 2.X已停止维护且IDEA不再直接支持,通过修改pom.xml或使用阿里云的国内源来创建项目。
144 0
idea创建不了spring2.X版本,无法使用JDK8,最低支持JDK17 , 如何用idea创建spring2.X版本,使用JDK8解决方案
|
2月前
|
Oracle Java 关系型数据库
jdk17安装全方位手把手安装教程 / 已有jdk8了,安装JDK17后如何配置环境变量 / 多个不同版本的JDK,如何配置环境变量?
本文提供了详细的JDK 17安装教程,包括下载、安装、配置环境变量的步骤,并解释了在已有其他版本JDK的情况下如何管理多个JDK环境。
1515 0
|
3月前
|
Java API 开发者
【Java字节码操控新篇章】JDK 22类文件API预览:解锁Java底层的无限可能!
【9月更文挑战第6天】JDK 22的类文件API为Java开发者们打开了一扇通往Java底层世界的大门。通过这个API,我们可以更加深入地理解Java程序的工作原理,实现更加灵活和强大的功能。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来!
|
4月前
|
开发者 C# UED
WPF多窗口应用程序开发秘籍:掌握窗口创建、通信与管理技巧,轻松实现高效多窗口协作!
【8月更文挑战第31天】在WPF应用开发中,多窗口设计能显著提升用户体验与工作效率。本文详述了创建新窗口的多种方法,包括直接实例化`Window`类、利用`Application.Current.MainWindow`及自定义方法。针对窗口间通信,介绍了`Messenger`类、`DataContext`共享及`Application`类的应用。此外,还探讨了布局控件与窗口管理技术,如`StackPanel`与`DockPanel`的使用,并提供了示例代码展示如何结合`Messenger`类实现窗口间的消息传递。总结了多窗口应用的设计要点,为开发者提供了实用指南。
297 0
|
3月前
|
Java
安装JDK18没有JRE环境的解决办法
安装JDK18没有JRE环境的解决办法
381 3
|
2天前
|
NoSQL 关系型数据库 MySQL
Linux安装jdk、mysql、redis
Linux安装jdk、mysql、redis
58 7
|
4月前
|
Oracle Java 关系型数据库
Mac安装JDK1.8
Mac安装JDK1.8
781 4
|
4月前
|
Java 关系型数据库 MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【8月更文挑战第19天】在Linux上搭建Java Web应用环境,需安装JDK 1.8、Tomcat及MariaDB。本指南详述了使用apt-get安装OpenJDK 1.8的方法,并验证其版本。接着下载与解压Tomcat至`/usr/local/`目录,并启动服务。最后,通过apt-get安装MariaDB,设置基本安全配置。完成这些步骤后,即可验证各组件的状态,为部署Java Web应用打下基础。
65 1