2023年9月19日Oracle正式发布了JDK 21,从Oracle Java SE Support Roadmap(Java SE支持路线图)可以看出,JDK 21作为下一个LTS(Long Term Support,长期支持)版本主要是从2023年9月到2028年9月提供支持(Premier Support),会延长支持(Extended Support)到2031年9月。
如果还停留在JDK 8,建议大家直接安装JDK 21(当然可以存在安装不同版本的JDK),像JDK 11首要支持到今年(会延长支持到2032),而且像Spring Boot 3.0等框架新版本都要求JDK 17以上,文章底部附带下载JDK21的方法。
Major New Functionality(主要新功能)
主要包括Language Feature(语言特性)、Libraries Improvements(工具包改进)、Performance Improvements(性能改进)和Stewardship(管理)四方面。
Language Feature(语言特性)
包括Record Patterns(记录模式)和Pattern Matching for switch(switch模式匹配),以及String Templates (Preview)(字符串模板(预览))、Unnamed Patterns and Variables (Preview)(无名模式和变量(预览))、Unnamed Classes and Instance Main Methods (Preview)(无名类和实例主方法(预览))三个预览语言特性。
Record Patterns(记录模式),使用记录模式增强Java编程语言,以解构记录值。可以嵌套记录模式和类型模式,以实现功能强大、声明性和可组合形式的数据导航和处理。详情访问:JEP 440。
Pattern Matching for switch(switch模式匹配),通过switch表达式和语句的模式匹配来增强Java编程语言。通过将模式匹配扩展到switch,可以针对多个模式测试表达式,每个模式都有一个特定的操作,从而可以简洁、安全地表达复杂的面向数据的查询。详情访问:JEP 441。
String Templates (Preview)(字符串模板(预览)),使用字符串模板增强Java编程语言。字符串模板通过将文本与嵌入的表达式和模板处理器耦合来生成专门的结果,从而补充Java现有的字符串文本和文本块。这是一个预览语言功能和API。详情访问:JEP 430。
Unnamed Patterns and Variables (Preview)(无名模式和变量(预览)),使用未命名模式和未命名变量来增强Java语言,未命名模式匹配记录组件而不说明组件的名称或类型,未命名变量可以初始化但不使用。两者都用下划线字符“_”表示。这是一个预览语言功能。详情访问:JEP 443。
Unnamed Classes and Instance Main Methods (Preview)(无名类和实例主方法(预览)),发展Java语言,使学生无需理解为大型程序设计的语言功能即可编写第一个程序。学生们不用使用单独的Java方言,就可以为单类程序编写精简的声明,然后随着技能的发展,无缝地扩展程序,使用更高级的功能。这是一个预览语言功能。详情访问:JEP 445。
Libraries Improvements(工具包改进)
包括Virtual Threads(虚拟线程)、Sequenced Collections(序列集合)、Key Encapsulation Mechanism API(密钥封装机制API),以及Foreign Function & Memory API (Third Preview)(外部函数和内存API(第三次预览))、Structured Concurrency (Preview)(结构化并发(预览))、Scoped Values (Preview)(作用域值(预览))、Vector API (Sixth Incubator)(向量API(第六个孵化器))。
Virtual Threads(虚拟线程)将虚拟线程引入Java平台。虚拟线程是轻量级线程,可以显著减少编写、维护和观察高吞吐量并发应用程序的工作量。详情访问:JEP 444。
Sequenced Collections(序列集合),引入新的接口来表示具有已定义的相遇顺序集合。每个这样的集合都有一个定义明确的第一元素、第二元素等等,直到最后一个元素。它还提供了统一的API,用于访问它的第一个和最后一个元素,以及以相反的顺序处理它的元素。详情访问:JEP 431。
Key Encapsulation Mechanism API(密钥封装机制API),介绍一种用于密钥封装机制(KEM)的API,这是一种使用公钥加密来保护对称密钥的加密技术。详情访问:JEP 452。
Foreign Function & Memory API (Third Preview)(外部函数和内存API(第三次预览)),引入API,Java程序可以通过该API与Java运行时之外的代码和数据进行互操作。通过有效地调用外部函数(例如,JVM外部的代码),并通过安全地访问外部内存(例如,不受JVM管理的内存),这个API使Java程序能够调用本机库并处理本机数据,而不会出现JNI的脆弱性和危险性。这是一个预览API。详情访问:JEP 442。
Structured Concurrency (Preview)(结构化并发(预览)),通过引入用于结构化并发的API来简化并发编程。结构化并发将在不同线程中运行的相关任务组视为单个工作单元,从而简化错误处理和消除,提高可靠性,并增强可观察性。这是一个预览API。详情访问:JEP 453。
Scoped Values (Preview)(作用域值(预览)),引入作用域值,这些值可以在不使用方法参数的情况下安全有效地共享给方法。它们优先于线程化局部变量,尤其是在使用大量虚拟线程时。这是一个预览API。详情访问:JEP 446。
Vector API (Sixth Incubator)(向量API(第六个孵化器)),引入API来表示向量计算,这些向量计算在运行时可靠地编译为支持的CPU架构上的最佳向量指令,从而实现优于等效标量计算的性能。详情访问:JEP 448。
Performance Improvements(性能改进)
主要是 Generational ZGC(分代ZGC),通过扩展Z垃圾回收器(ZGC)来维护年轻对象和旧对象的独立生成,从而提高应用程序性能。这将使ZGC能够更频繁地收集那些很快死去的年轻对象。详情访问:JEP 439。
Stewardship(管理)
主要是Prepare to Disallow the Dynamic Loading of Agents(准备禁用动态加载代理),将代理动态加载到正在运行的JVM中时发出警告。这些警告旨在让用户为将来的版本做好准备,该版本默认情况下不允许动态加载代理,以提高默认情况下的完整性。在启动时加载代理的可服务性工具不会导致在任何版本中发出警告。详情访问:JEP 451。
New Features(新功能)
Runtime.exec and ProcessBuilder Logging of Command Arguments (JDK-8303392)
System.exit() and Runtime.exit() Logging (JDK-8301627)
Math.clamp() and StrictMath.clamp() Methods (JDK-8301226)
New String indexOf(int,int,int) and indexOf(String,int,int) Methods to Support a Range of Indices (JDK-8302590)
Unicode Emoji Properties (JDK-8303018)
New splitWithDelimiters() Methods Added to String and java.util.regex.Pattern (JDK-8305486)
The java.net.http.HttpClient Is Now AutoCloseable (JDK-8267140)
Support for GB18030-2022 (JDK-8301119)
New StringBuilder and StringBuffer repeat Methods (JDK-8302323)
Emoji Related Binary Properties in RegEx (JDK-8305107)
Sequenced Collections (JEP 431)
Warning Printed When an Agent Is Loaded into a Running VM (JEP 451)
Generational ZGC (JEP 439)
Last Resort G1 Full GC Moves Humongous Objects (JDK-8191565)
New JFR View Command (JDK-8306703)
Enhanced OCSP, Certificate, and CRL Fetch Timeouts (JDK-8179502)
Support for HSS/LMS Signature Verification (JDK-8298127)
SunJCE Provider Now Supports SHA-512/224 and SHA-512/256 As Digests for the PBES2 Algorithms (JDK-8288050)
Support for Password-Based Cryptography in SunPKCS11 (JDK-8301553)
New System Property to Toggle XML Signature Secure Validation Mode (JDK-8301260)
Update XML Security for Java to 3.0.2 (JDK-8305972)
String Templates (Preview) (JEP 430)
Unnamed Classes and Instance Main Methods (Preview) (JEP 445)
New javac Warning When Calling Overridable Methods in Constructors (JDK-8015831)
Generate “output file clash” Warning when an Output File is Overwritten During Compilation (JDK-8287885)
Support Searching for Section Headings in Generated Documentation (JDK-8286470)
JDK Tool Access in JShell (JDK-8306560)
-XshowSettings:locale Output Now Includes Tzdata Version (JDK-8305950)
Changes to JAXP Configuration Files (JDK-8303530)
Removed Features and Options(删除的功能和选项)
java.io.File’s Canonical Path Cache Is Removed (JDK-8300977)
ThreadGroup.allowThreadSuspension Is Removed (JDK-8297295)
Removal of the java.compiler System Property (JDK-8041676)
The java.lang.Compiler Class Has Been Removed (JDK-8205129)
Remove the JAR Index Feature (JDK-8302819)
javax.management.remote.rmi.RMIIIOPServerImpl Is Removed (JDK-8307244)
Removal of G1 Hot Card Cache (JDK-8225409)
Obsolete Legacy HotSpot Parallel Class Loading Workaround Option -XX:+EnableWaitForParallelLoad Is Removed (JDK-8298469)
The MetaspaceReclaimPolicy Flag has Been Obsoleted (JDK-8302385)
Removed SECOM Trust System’s RootCA1 Root Certificate (JDK-8295894)
Removal of ContentSigner APIs and jarsigner -altsigner and -altsignerpath Options (JDK-8303410)
Deprecated Features and Options(弃用的功能和选项)
Deprecate GTK2 for Removal (JDK-8280031)
com.sun.nio.file.SensitivityWatchEventModifier Is Deprecated (JDK-8303175)
Emit Warning for Removal of COMPAT Provider (JDK-8304982)
Deprecate JMX Subject Delegation and the JMXConnector.getMBeanServerConnection(Subject) Method for Removal (JDK-8298966)
还有Notable Issues Resolved(已解决的显著问题)、Known Issues(已知问题)、Other Notes(其他注意事项)、Differences Between Oracle JDK and OpenJDK(Oracle JDK与OpenJDK的区别)等,详情请访问JDK 21 Release Notes。
JDK下载链接:JDK Development Kit 21,安装说明:Installation Instructions,在线文档:JDK 21 Documentation。
如果不知道或无法下载JDK 21的可以到公众号发送关键字“s4523”获取所有文件。
展开阅读全文
上一篇: 苹果推送了iOS 17、iPadOS 17、watchOS 10、tvOS 17正式版
下一篇:解决Spring Boot 3+和Spring Security 6+框架下thymeleaf的sec:authorize等标签无效问题