近日,Oracle发布了JDK20。与Java开发者相比,JDK的发布更受关注。让我们了解一下JDK20有什么变化?首先,JDK20是一个短周期版本,维护周期为6个月。按照开发者的计划,下一个LTS和长期维护版本会在2023年9月发布,也就是JDK21。目前JDK21也推出了早期预览版。JDK20提供来自OpenJDKProjectAmber的语言改进(用于Switch的记录模式和模式匹配)、来自OpenJDKPanamaProject的增强功能以??互连Java虚拟机(JVM)和本机代码(外部函数和内存API以及向量API),以及与ProjectLoom相关的功能(作用域值、虚拟线程和结构化并发)将大大简化编写、维护和观察高吞吐量并发应用程序的过程。Oracle按照可预测的发布时间表每六个月发布一次新的Java特性。这种节奏提供了源源不断的创新以及对平台性能、稳定性和安全性的持续改进,有助于提高Java在各种规模的组织和行业中的普遍性。变化语言更新和改进JEP432:记录模式(第二次预览):通过允许用户嵌套记录模式和类型模式来创建强大的、声明式的和可组合的数据导航和处理形式,从而增强了Java语言。这有助于提高开发人员的工作效率,使他们能够扩展模式匹配以允许更复杂和可组合的数据查询。JEP433:Switch的模式匹配(第四次预览):通过将模式匹配扩展到switch,可以针对许多表达式测试表达式模式——每个模式都有一个特定的动作——这样复杂的面向数据的查询就可以简洁、安全地表达出来。扩展switch表达式和语句的表现力和适用性有助于提高开发人员的工作效率。ProjectLoomPreview/IncubatorFeaturesJEP429:ScopedValues(Incubator):支持在线程内和线程间共享不可变数据,这优于线程本地variables——尤其是在使用大量虚拟线程时。这提高了易用性、可理解性、健壮性和性能。JEP436:虚拟线程(第二次预览):通过将轻量级虚拟线程引入Java,显着简化编写、维护和观察高吞吐量、并发应用程序的过程平台。通过使开发人员能够使用现有的JDK工具和技术轻松地对并发应用程序进行故障排除、调试和分析,虚拟线程有助于加速应用程序开发。JEP437:结构化并发(第二个孵化器):通过将在不同线程中运行的多个任务视为一个单一的工作单元。这有助于开发团队简化错误处理和取消、提高可靠性并增强可观察性。巴拿马项目预览功能JEP434:外部函数和内存API(第二个预览):使Java程序能够int在Java运行时之外操作代码和数据。通过有效地调用外部函数(即Java虚拟机[JVM]外部的代码),并通过安全地访问外部内存(即不受JVM管理的内存),此功能使Java程序能够调用本机库并处理本机数据而无需需要Java本机接口。这提高了易用性、性能和安全性。JEP438:矢量API(第五孵化器):表示矢量计算,可以在运行时可靠地编译为支持的CPU架构上的矢量指令。与等效的标量计算相比,这提高了性能。JDK20包含7个JEP,已经数百万小功能点的变化JEPJEP语言更新和改进432RecordPatterns(SecondPreview)433PatternMatchingforSwitch(FourthPreview)429ScopedValues(Incubator)436VirtualThreads(SecondPreview)437StructuredConcurrency(SecondIncubator)434ForeignFunction&MemoryAPI(SecondPreview)438VectorAPI(FifthIncubator))看不懂英文也没关系,因为我也看不懂,直接去官网整理资料,我们可以翻译成中文再查。本段来自程序员DD的文章:作用域值(ScopedValues)进入孵化阶段,引入ScopedValues,可以在线程内和线程间共享不可变数据。它们优于线程局部变量,尤其是在使用大量虚拟线程时。记录模式(RecordPatterns)进入第二个预览阶段。记录模式可以解构记录的值。Record模式和Type模式可以通过嵌套实现强大的、声明式的、可组合的数据导航和处理形式。switchPatternMatching(switch的模式匹配)预览版4通过switch表达式和语句的模式匹配以及对模式语言的扩展增强了Java编程语言。将模式匹配扩展到switch,允许表达式针对某些模式进行测试,以便可以简洁、安全地表达复杂的面向数据的查询。Preview2中的ForeignFunction&MemoryAPI(外部函数和内存API)引入了一种API,Java程序可以通过该API与Java运行时之外的代码和数据进行互操作。通过高效地调用外部函数,安全地访问外部内存,该API使Java程序能够调用本地库和操作本地数据,而没有JNI的漏洞和危险。虚拟线程(VirtualThreads)进入第二个预览阶段为Java引入虚拟线程,虚拟线程是JDK实现的轻量级线程,在其他多线程语言中被证明非常有用,比如Go中的Goroutine,进程中的Erlang.虚拟线程避免了上下文切换的额外开销,兼顾了多线程的优势,简化了高并发程序的复杂度,可以有效降低编写、维护和观察高吞吐量并发应用的工作量。结构化并发(StructuredConcurrency)进入第二孵化阶段JDK19引入结构化并发,这是一种多线程编程方式,目的是通过结构化并发API简化多线程编程,而不是取代java.util.concurrent。结构化并发将在不同线程中运行的多个任务视为单个工作单元,从而简化了错误处理、提高了可靠性并增强了可观察性。也就是说,结构化并发保留了单线程代码的可读性、可维护性和可观察性。VectorAPI进入孵化阶段5矢量计算由对矢量的一系列操作组成。VectorAPI用于表示可以在运行时可靠地编译为支持的CPU体系结构上的最佳矢量指令的矢量计算,从而获得比等效标量计算更好的性能。矢量API的目标是为用户提供简洁、易于使用且与平台无关的各种矢量计算的表达方式。JDK21计划在2023年9月发布一个GA和下一个LTS版本。目前,JDK21的ProposedtoTarget有两个JEP。JEP430,字符串模板(预览版),一种JEP类型的功能,建议使用类似于字符串文字的字符串模板来增强Java编程语言,但在运行时将其合并到字符串模板中.该功能已被归类为JDK21的拟议目标,但尚未公布官方审核日期。JEP431,SequenceCollections,提议引入“一个接口,该接口支持集合概念的新表示,其元素按定义明确的顺序排列,作为集合的结构属性。”动机是由于在CollectionsFramework中缺乏一组定义明确的排序和统一操作。该功能已被归类为JDK21的拟议目标,但尚未公布官方审核日期。然后在InfoQ中找到以下信息:我们可以根据一些JEP草稿和候选者推测JDK21中可能包含哪些额外的JEP。JEP草案8303358,ScopedValues(预览版),由RedHat杰出工程师AndrewHaley和AndrewDinn提交,改进了JEP20,ScopedValues(孵化器),在即将发布的JDK429中可用。以前称为scopedlocals(孵化器),由ProjectLoom提供支持,此功能建议在线程内和线程之间共享不可变数据。这优先于线程局部变量,尤其是在使用大量虚拟线程时。虽然草案尚未达到候选状态,但描述中明确指出此JEP将添加到JDK21。JEP草案8277163,ValueObjects(预览版)是Valhalla项目赞助的JEP的一个功能,建议创建值对象——无标识的值类,指定其实例的行为。该草案与JEP401PrimitiveClasses(Preview)有关,目前仍处于候选状态。JEP435,AsynchronousStackTraceVMAPI,一种功能性JEP类型,建议定义一个有效的API,用于从信号处理程序获取异步调用跟踪,以便从具有Java和本机帧信息的信号处理程序进行分析。JEP401,原始类(预览版),在Valhalla项目的支持下,引入了开发人员声明的原始类——特殊类型的值类——如上面的值对象(预览版)JEP草案中所定义——定义了新的原始类型。JEP8301034草案,KeyEncapsulationMechanismAPI是一个JEP类型的特性,它提议:满足标准密钥封装机制(KEM)算法的实现;使用更高级别的安全协议满足KEM用例;并允许服务提供商插入Java或KEM算法的本机实现。该草案最近进行了更新,包括一项重大更改,该更改删除了DerivedKeyParameterSpec类,以支持将字段放置在封装的(intfrom、intto、String算法)方法的参数列表中。JEP8283227草案,JDK源代码结构,一种信息性JEP类型,描述了JDK存储库中JDK源代码和相关文件的总体布局和结构。此JEP推荐可帮助开发人员适应JDK201中提供的JEP9模块化源代码中描述的源代码结构。JEPDraft8280389,ClassFileAPI,提出了一个用于解析、生成和转换Java类文件的API。这个JEP最初将作为ASM的内部替代品,ASM是JDK中的Java字节码操作和分析框架,并计划将其作为公共API开放。Oracle的Java语言架构师BrianGoetz将ASM描述为“一个带有大量遗留包袱的旧代码库”,并提供了有关该草案将如何发展并最终取代ASM的背景信息。JEP8278252草案,JDK打包和安装指南,一个信息性JEP,建议提供在macOS、Linux和Windows上创建JDK安装程序的指南,以降低来自不同JDK提供商的JDK安装之间发生冲突的风险。其目的是通过正式化安装目录名称、包名称和安装程序中可能导致冲突的其他元素,在安装JDK的较新发行版时提供更好的体验。我们希望Oracle很快开始为JDK21贡献更多的JEP。本段来自作者:相关网址Oracle关于JDK20的发布消息OracleReleasesJava20:https://www.oracle.com/news/announcement/oracle-releases-java...OpenJDK的JDK20下载页面:https://jdk.java.net/20/OpenJDK的JDK21开发预览版下载页面:https://jdk.java.net/21/
