写点什么

Java 20 发布,新特性一览:Amber、Loom 和 Panama 项目

  • 2023-03-24
    北京
  • 本文字数:3960 字

    阅读完需:约 13 分钟

Java 20发布,新特性一览:Amber、Loom 和 Panama 项目

甲骨文发布了Java 编程语言和虚拟机的20版本,最终的特性集中包含了 7 个 JEP:


Java 20 的特性节奏类似于 JDK 19 的 7 个新特性和 JDK 18 的 9 个新特性。但是,与 JDK 18 之前的几个版本相比,特性要更少一些,比如,JDK 17 中有 14 项特性,JDK16 中有 17 项特性,JDK 15 中有 14 项特性,JDK 14 中有 16 项特性。


该版本的 JEP 为AmberLoomPanama项目的新一轮预览和孵化持续贡献了特性。在这里,我们探讨其中的几个新特性。值得注意的是,JDK 20 中没有代表Valhalla项目的 JEP。

Panama 项目


JEP 434 和 JEP 438 属于Panama项目,该项目旨在改善和丰富 JVM 与定义明确的“外部” API(即非 Java)之间的互操作性,其中很可能会包含 C 库中常用的接口。


JEP 434,外部函数与内存API(第二轮预览),基于反馈进行了改善,并基于 JDK 19 所提供的 JEP 424外部函数与内存API(预览)提供了第二轮预览。相关的孵化包括 JDK 18 交付的外部函数与内存API(第二轮孵化)和 JDK 17 中交付的外部函数与内存API(孵化)。该特性为 Java 应用提供了一个 API,能够通过高效地调用外部函数和安全地访问不受 JVM 管理的外部内存,实现了与 Java 运行时之外的代码和数据进行互操作。JEP 424 的更新包括:统一了MemorySegmentMemoryAddress接口,即内存地址建模为零长度的内存段;增强了密闭的MemoryLayout接口,以便于和 JDK 19 交付的switch的模式匹配(第三轮预览)协同使用。


JEP 438,Vector API(第五轮孵化),对之前四轮孵化的反馈进行了增强,即 JDK 19 交付的 JEP 426,Vector API(第四轮孵化)、JDK 18 交付的 JEP 417, Vector API(第三轮孵化)、JDK 17 交付的Vector API(第二轮孵化)和 JDK 16 交付的孵化模块。该特性的目标是增强 Vector API,从而能够根据 JEP 424, 外部函数与内存API(预览)的定义,从MemorySegment中加载和存储 vector。

关于如何实现“外部函数与内存 API”的可运行应用,可以参阅该GitHub仓库,其作者是 Azul 的开发人员布道师Carl Dea

Loom 项目


JEP 429、JEP 436 和 JEP 437 属于Loom项目,该项目旨在探索、孵化和交付 Java VM 特性和 API,以便于支持易用、高吞吐的轻量级并发和新编程模型。这可以通过虚拟线程、定界延续(delimited continuations)和尾调用(tail calls)来实现。


JEP 429,作用域值(孵化阶段),它是一个正在孵化中的 JEP,最初叫做范围局部变量(Extent-Local Variables,Incubator),提议在线程内部和线程间共享不可变的数据。这比线程局部(thread-local)变量的做法更好,尤其是在大量使用虚拟线程的时候。


JEP 436,虚拟线程(第二轮预览),提议对 JDK 19 所提供的 JEP 425,虚拟线程(预览)进行第二次预览,以便留出充分的时间为该特性的演进提供更多的反馈和体验。该特性为 Java 平台提供了虚拟线程,这是一种轻量级线程,可以极大地减少编写、维护和观测高吞吐量并发应用程序的工作量。需要注意的是,本预览版仅对 JDK 19 所固定的 JEP 425 的 API 进行了少量修改,除此之外没有其他变化,所以在第二轮预览中没有任何提议。请参阅 InfoQ 的新闻报道和甲骨文 Java 平台组的 Java 开发人员布道师José Paumard的 JEP Café录像


JEP 437,结构化并发(第二轮孵化),提议基于 JDK 19 中所提供的 JEP 428,结构化并发(孵化)重新孵化,以便留出充分的时间为该特性的演进提供更多的反馈和体验。此特性的目的是通过引入一个库来将在不同线程中运行的多个任务视为单个工作单元,从而简化多线程编程。这可以简化错误处理和撤销,提升可靠性,并增强可观测性。该 JEP 的唯一的变化是更新了StructuredTaskScope类,以支持在任务作用域中创建的线程可以继承作用域的值。这简化了线程间不可变数据的共享。有关 JEP 428 的更多详细信息,请参阅 InfoQ 的新闻报道


关于如何实现虚拟线程和结构化并发 API 的可运行应用,可以参阅甲骨文的 Java 开发人员布道师Nicolai Parlog创建的GitHub仓库以及 Contrast Security 的高级软件工程师Bazlur Rahman创建的GitHub仓库。

Amber 项目


JEP 432 和 JEP 433 属于Amber项目,该项目旨在探索和孵化更小的 Java 语言特性,以提升生产力。


JEP 432,记录模式(第二轮预览),为了响应上一轮预览JEP 405,记录模式(预览)的反馈,该 JEP 包含了功能增强。它提议使用记录模式来解构记录值,以实现对语言的增强。记录模式可以与类型模式结合使用,以“实现强大的、声明式的、可组合的数据导航和处理形式”。类型模式最近通过 JDK 19 交付的 JEP 427,switch模式匹配(第三次预览)、JDK 18 交付的 JEP 420,switch模式匹配(第二次预览)和 JDK 17 交付的 JEP 406,switch模式匹配(预览)扩展到了switch case 标签中。与 JEP 405 相比,它的变更包括,增加了对泛型记录模式类型参数推断的支持,增加了对记录模式出现在增强 for 语句条件判断中的支持,并删除对了对命名记录模式的支持。


与之类似,JEP 433:switch 的模式匹配(第四次预览),提供了功能增强,以响应前三轮预览的反馈,即 JDK 19 交付的 JEP 427,switch的模式匹配(第三次预览)、JDK 18 交付的 JEP 420,switch的模式匹配(第二次预览)和 JDK 17 交付的 JEP 406,switch的模式匹配(预览)。与 JEP 427 相比,新 JEP 提供的变更包括,简化了switch标签的语法、switch表达式和语句以及其他支持模式的构造体均支持泛型类型模式和记录模式的类型参数推断。


关于如何实现记录模式和 switch API 的模式匹配的可运行应用,可以参阅 Global Points 的技术主管Wesley Egberto创建的GitHub仓库,该特性位于java-19目录中。

JDK 21


目前,JDK 21 只包含一个 Targeted 状态的 JEP。JEP 431,序列集合,在 JDK 21 中已经从 Proposed to Target 状态提升到了 Targeted 状态。该 JEP 提议引入“一个新的接口系列,代表了元素能够以明确的序列或顺序排列在集合中的概念,使其作为集合的结构化属性”。该 JEP 的动机在于集合框架(Collections Framework)中缺乏定义良好的排序和统一操作集。关于 JEP 431 的更多信息,请参阅 InfoQ 的新闻报道


但是,根据最近提交的 JEP 草案和提出最终特性的 JEP 候选方案,我们可以推测出哪些 JEP 有可能纳入到 JDK 21 中。


JEP 440,记录模式,上周已经从 JEP Draft 8300541 状态提升Candidate 状态。该 JEP 最终确定了这一特性,并根据前两轮预览的反馈意见进行了改进,即 JDK 20 交付的JEP 432,记录模式(第二轮预览)和 JDK 19 交付的JEP 405,记录模式(预览)。该特性使用记录模式来解构记录值,以实现对语言的增强。记录模式可以与类型模式结合使用,以“实现强大的、声明式的、可组合的数据导航和处理形式”。类型模式最近通过 JDK 18 交付的 JEP 420,switch模式匹配(第二次预览)和 JDK 17 交付的 JEP 406,switch模式匹配(预览)扩展到了switch case 标签中。从 JEP 432 以来,最重要的变更是移除对记录模式出现在增强for语句条件判断中的支持。


与之类似,JEP 441,switch的模式匹配,已经从 JEP Draft 8300542 状态提升到Candidate 状态。该 JEP 也最终确定了这一特性,并根据前四轮预览的反馈意见进行了改进,即 JDK 20 交付的 JEP 433: switch的模式匹配(第四轮预览)、JDK 19 交付的JEP 427,switch的模式匹配(第三轮预览)、JDK 18 交付的JEP 420,switch的模式匹配(第二轮预览)和JDK 17交付的JEP 406,switch的模式匹配(预览)。该特性通过对 switch 表达式和语句进行模式匹配,增强了语言的特性。


JEP 442, 外部函数与内存API(第三轮预览),已经从 JEP Draft 8301625 状态提升到了 Candidate 状态。该 JEP 基于之前的反馈进行了改进,并提供了第三个预览,这些反馈来自 JDK 20 交付的 JEP 434,外部函数与内存API(第二轮预览)、JDK 19 交付的 JEP 424,外部函数与内存API(预览)以及相关的孵化,即 JDK 18 交付的 JEP 419,外部函数与内存API(第二轮孵化)和 JDK 17 交付的 JEP 412,外部函数与内存API(孵化)。该特性为 Java 应用提供了一个 API,能够通过高效地调用外部函数和安全地访问不受 JVM 管理的外部内存,实现了与 Java 运行时之外的代码和数据进行互操作。JEP 434 的更新包括,在Arena接口中集中管理原生段的生命周期;增强布局路径,用一个新元素来解除对地址布局的引用;删除 VaList类。


甲骨文公司 Loom 项目的架构师和技术负责人Ron Pressler和甲骨文公司 Java 平台组的架构师Alan Bateman在上周提交了 JEP Draft 8303683虚拟线程。该 JEP 提议根据前两轮预览的反馈来最终确定该功能,即 JDK 20 交付的 JEP 436,虚拟线程(第二轮预览)和 JDK 19 交付的 JEP 425, 虚拟线程(预览)。该特性为 Java 平台提供了虚拟线程,这是一种轻量级线程,可以极大地减少编写、维护和观测高吞吐量并发应用程序的工作量。与 JEP 436 相比,最重要的变化是,虚拟线程现在完全支持线程局部(thread-local)变量,消除了选择不使用这些变量的选项。关于 JEP 425 的更多细节,请参阅 InfoQ 的新闻报道和甲骨文 Java 平台组的 Java 开发人员布道师José Paumard的 JEP Café录像


JDK 21的正式发布日期尚未公布,但按照六个月的发布周期,预计将于 2023 年 9 月中旬交付。作为开发人员,我们可以预计特性冻结会在 2023 年 6 月中旬。关于其他 JEP 草案和候选版本的更多细节,可以在 InfoQ 的这篇更详细的新闻报道中找到。


JDK 20 现在可以从甲骨文网站下载,其他供应商的二进制文件预计将在未来几天内提供。


原文链接:

Java 20 Delivers Features for Projects Amber, Loom and Panama


相关阅读:

JDK 20 和 JDK 21 最新动态

Java 近期新闻:JDK 21 序列集合、JDK 20 向量 API、Gen ZGC、Hilla 2.0

2023-03-24 09:3621478

评论

发布
用户头像
该评论已删除
2023-03-27 10:00 · 浙江
回复
努力先搞到11再说
2023-03-27 10:45 · 辽宁
回复
该评论已删除
2023-04-17 11:14 · 浙江
回复
没有更多了
发现更多内容

建设数字工厂:生产物料齐套检查的实现方法

华为云开发者联盟

华为云 华为云开发者联盟 企业号 6 月 PK 榜

联盟送福利:云上掘金,开启你收入的第二增长曲线

华为云开发者联盟

云计算 华为云 华为云开发者联盟 企业号 6 月 PK 榜

数据驱动,支撑企业数智化平台升级

用友BIP

数智平台

为开发者“铸剑”,一图揭秘华为云CodeArts IDE四大特性

华为云PaaS服务小智

云计算 开发者 华为云

华为手环、耳机等礼品!等你拿~快来参与CodeArtsBuild实践体验!

华为云PaaS服务小智

云计算 华为 华为云

ByteHouse+Apache Airflow:高效简化数据管理流程

字节跳动数据平台

airflow 数据管理 bytehouse

2种GaussDB(DWS)查看作业运行信息方式

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

Web 富文本编辑器之 Android 输入兼容

爱吃小舅的鱼

Web 富文本编辑器 Android 输入兼容

vue使用Element-ui组件库-按需引入

我搬去水星了

6 月 优质更文活动

vue使用Element-ui组件库-完整引入

我搬去水星了

6 月 优质更文活动

vue2.x与vue3.x中自定义指令详解

不叫猫先生

Vue 6 月 优质更文活动

前端基于DOM或者Canvas实现页面水印

不叫猫先生

Vue canvas 6 月 优质更文活动

dart-sass与node-sass的区别以及使用dart-sass可能会出现的问题

不叫猫先生

CSS SASS 6 月 优质更文活动

喜报|瑞云科技荣获“年度汽车数字化营销供应商”奖

3DCAT实时渲染

云仿真 汽车三维可视化 汽车虚拟仿真

风口上的AIGC,技术岗动不动年薪百万,甚至重金难求?

引迈信息

人工智能 低代码 AIGC ChatGPT

GitHub 2800颗星,支持GPT/Transformer,字节跳动这个开源项目是怎么来的?

字节跳动技术范儿

机器学习 nlp

软件测试|抓包工具Charles--出现unknown怎么解决?

霍格沃兹测试开发学社

生产环境可用的 Seata-go 1.2.0 来啦!!!

SOFAStack

Java seata 版本发布 Seata框架 Seata-go

Linux常用命令

Geek_7ubdnf

Acrobat Pro DC 2023 for Mac(PDF编辑器) 中文最新

背包客

macos Mac软件 pdf编辑工具 Acrobat DC 2023 Acrobat DC

手势识别技术及其应用

来自四九城儿

NFTScan 与 WalletFrens 达成合作伙伴,由 NFTScan 为其提供多链 NFT 数据服务!

NFT Research

合作 NFT\

TS类型声明

不叫猫先生

typescript 6 月 优质更文活动

Vue-路由器的两种工作模式(history和hash)

不觉心动

6 月 优质更文活动

香港便宜虚拟主机:高性能、低成本,让你的网站事半功倍!

一只扑棱蛾子

香港主机 香港便宜虚拟主机

MegEngine 使用小技巧:如何做 MegCC 的模型性能评测

MegEngineBot

深度学习 开源 性能测试 编译器 MegEngine

Spring Security6 全新写法,大变样!

江南一点雨

Java springboot springsecurity

HStore表全了解:实时入库与高效查询利器

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

Vue-后置路由守卫(afterEach)以及独享路由守卫(beforeEnter)

不觉心动

6 月 优质更文活动

Vue路由守卫-前置路由守卫(beforeEach)

不觉心动

6 月 优质更文活动

Java 20发布,新特性一览:Amber、Loom 和 Panama 项目_语言 & 开发_Michael Redlich_InfoQ精选文章