软件介绍人气软件相关文章下载地址↓

Java 21 / JDK 21 已正式 GA,此版本是继 JDK 17 后的长期支持版本 (LTS),Oracle 将为其提供至少八年的技术支持和更新。根据 Oracle 免费条款和条件 (NFTC),JDK 21 二进制文件可在生产中免费使用,也可免费再分发。

JDK 21 将根据 NFTC 接受更新,直至 2026 年 9 月,即下一个 LTS 发布一年后。JDK 21 的后续更新将根据 Java SE OTN License (OTN) 授权,超出 OTN License 有限免费授权范围的生产使用将需要付费。

Java SE Development Kit 21提供了数以千计的性能、稳定性和安全性改进,包括平台增强功能,可帮助开发人员提高工作效率并推动整个组织的创新和增长。新版本在语言特点、库、性能、管理权等多个方面进行主要更新和增强,全新的功能带来绝佳的使用体验!

主要新功能

1. 语言特点

? 记录模式

使用记录模式增强 Java 编程语言以解构记录值。可以嵌套记录模式和类型模式,以实现功能强大、声明性和可组合形式的数据导航和处理。

? 开关模式匹配

通过表达式和语句的模式匹配来增强 Java 编程语言。扩展模式匹配允许针对多个模式测试表达式,每个模式都有一个特定的操作,以便可以简洁安全地表达复杂的面向数据的查询。

1.1 语言功能预览

? 字符串模板(预览版)

使用字符串模板增强 Java 编程语言。字符串模板通过将文字文本与嵌入式表达式和模板处理器耦合来补充 Java 现有的字符串文字和文本块,以产生专门的结果。这是一个预览语言功能和 API。

? 未命名模式和变量(预览版)

使用未命名的模式(与记录组件匹配而不说明组件的名称或类型)和未命名变量(可以初始化但不使用)来增强 Java 语言。两者都由下划线字符 表示。这是一项预览语言功能。_

? 未命名类和实例主方法(预览版)

改进 Java 语言,以便学生可以编写他们的第一个程序,而无需了解为大型程序设计的语言功能。学生远非使用单独的Java方言,而是可以为单类程序编写简化的声明,然后随着技能的增长无缝扩展他们的程序以使用更高级的功能。这是一项预览语言功能。

2. 库改进

? 虚拟线程

将虚拟线程引入 Java 平台。虚拟线程是轻量级线程,可显著减少编写、维护和观察高吞吐量并发应用程序的工作量。

? 排序集合

引入新接口来表示具有定义的遭遇顺序的集合。每个这样的集合都有一个明确定义的第一个元素、第二个元素,依此类推,直到最后一个元素。它还提供统一的 API,用于访问其第一个和最后一个元素,以及以相反的顺序处理其元素。

“生活只能倒着理解;但它必须向前生活。

— 克尔凯郭尔

? 密钥封装机制接口

介绍密钥封装机制 (KEM) 的 API,这是一种使用公钥加密保护对称密钥的加密技术。

2.1 库改进预览和孵化器

? 外部函数和内存 API(第三预览版)

引入一个 API,通过该 API,Java 程序可以与 Java 运行时之外的代码和数据进行互操作。通过有效地调用外部函数(即JVM外部的代码)和安全地访问外部内存(即不由JVM管理的内存),API使Java程序能够调用本机库并处理本机数据,而不会像JNI那样脆弱和危险。这是一个预览版 API。

? 结构化并发(预览版)

通过引入结构化并发 API 来简化并发编程。结构化并发将在不同线程中运行的相关任务组视为单个工作单元,从而简化错误处理和取消,提高可靠性并增强可观测性。这是一个预览版 API。

? 作用域值(预览版)

引入作用域值,这些值可以在不使用方法参数的情况下安全有效地共享到方法。它们优先于线程局部变量,尤其是在使用大量虚拟线程时。这是一个预览版 API。

实际上,作用域值是一个隐式方法参数。“好像”调用序列中的每个方法都有一个额外的、不可见的参数。没有一种方法声明此参数,只有有权访问作用域值对象的方法才能访问其值(数据)。作用域值使通过一系列中间方法将数据从调用方安全地传递到远方被调用方成为可能,这些中间方法不声明数据的参数,并且无法访问数据。

? 载体 API(第六孵化器)

引入一个 API 来表达矢量计算,该计算在运行时可靠地编译为支持的 CPU 架构上的最佳矢量指令,从而实现优于等效标量计算的性能。

3. 性能改进

? 代代中关村

通过扩展 Z 垃圾回收器 (ZGC) 来提高应用程序性能,以便为年轻对象和旧对象维护不同的代。这将使ZGC能够更频繁地收集年轻物体 - 这些物体往往会英年早逝。

4. 管理权

? 准备禁止代理的动态加载

在将代理动态加载到正在运行的 JVM 中时发出警告。这些警告旨在让用户为将来的版本做好准备,该版本默认不允许动态加载代理,以便在默认情况下提高完整性。在启动时加载代理的功能功能工具不会导致在任何版本中发出警告。

详细新功能请参考:https://www.oracle.com/java/technologies/javase/21-relnote-issues.html

正式稳定功能

JEP 444:虚拟线程

JEP 431:序列集合

JEP 440:记录模式

JEP 441:switch 模式匹配

JEP 439:分代 ZGC

JEP 449:弃用 Windows 32 位 x86 移植

JEP 451:准备禁止动态加载代理

JEP 452:密钥封装机制 API

预览阶段功能

JEP 442:外部函数和内存 API(第三次预览)

JEP 446:作用域值(预览)

JEP 453:结构化并发(预览)

JEP 430:字符串模板(预览)

JEP 443:未命名模式和变量(预览)

JEP 445:未命名类和实例主方法(预览)

孵化阶段功能

JEP 448:Vector API(孵化器第六阶段)

Java SE Development Kit 21安装教程

1、下载并解压,如图所示

2、安装,安装目录

3、安装完成,根据提示进行后续设置

更新日志

Java™ SE 开发工具包 21.0.3 (JDK 21.0.3)
发布日期:2024 年 4 月 16 日

此更新版本的完整版本字符串为 21.0.3+7(其中“+”表示“生成”)。版本号为 21.0.3。

IANA TZ 数据 2024a
JDK 21.0.3 包含 IANA 时区数据 2024a,其中包含以下更改:

Ittoqqortoormiit, 格陵兰岛 于 2024-03-31 更改时区。
沃斯托克, 南极洲 于 2023-12-18 更改了时区。
自 2020 年以来,南极洲凯西五次更改时区。
从 2072 年开始的巴勒斯坦时间戳的代码和数据修复。
从现在开始的时间戳的新数据文件 zonenow.tab。
哈萨克斯坦从 2024-03-01 开始在 UTC+5 上统一。
斋月过后一周,巴勒斯坦迅速崛起。
zic 不再假装支持无限期过去的 DST。
localtime 在 2422 年不再对华雷斯城进行错误处理。
有关详细信息,请参阅 JRE 软件中的时区数据版本。

安全基线
下表指定了 JDK 21.0.3 发布时 Java 运行时的安全基线:

Java 系列版本    安全基线(完整版本字符串)Security Baseline (Full Version String)
21    21.0.3+7
17    17.0.11+7
11    11.0.23+7
8    8U411-B09型

新功能
安全库/javax.crypto
? 将 XML Security for Java 更新到 3.0.3 (JDK-8319124)
XML 签名实现已更新到 Santuario 3.0.3。添加了对四种新的基于 SHA-3 的 RSA-MGF1 签名方法的支持:、 、 和 。虽然这些新算法 URI 未在 JDK 更新版本中定义,但它们可以表示为字符串文本,以便在功能上等效。SHA-3 哈希算法支持通过 JEP 287 交付给 JDK 9。在此之前发布的版本可能会使用第三方安全提供程序。SHA3_224_RSA_MGF1SHA3_256_RSA_MGF1SHA3_384_RSA_MGF1SHA3_512_RSA_MGF1javax.xml.crypto.dsig.SignatureMethod

其他说明
客户端库/java.awt
? 大多数 Linux 桌面不支持 AWT SystemTray API (JDK-8322750)
该 API 用于桌面任务栏中的通知,并且可能包含表示应用程序的图标。在 Linux 上,由于平台错误,Gnome 桌面在任务栏中自己的图标支持已经好几年没有正常工作了。这反过来又影响了依赖于它的 JDK 的 API。java.awt.SystemTray

因此,根据现有的 Java SE 规范,只要 JDK 确定可能存在平台错误,就会返回 false。java.awt.SystemTray.isSupported()

这种影响可能是有限的,因为应用程序始终必须检查该支持。此外,某些发行版已经好几年不支持 SystemTray,除非最终用户选择安装非捆绑桌面扩展。

security-libs/java.security
? 添加了 R1 和 E1 根证书 (JDK-8321408)
以下根证书已添加到 cacerts 信任库中:

+ Certainly

  + certainlyrootr1
    DN: CN=Certainly Root R1, O=Certainly, C=US

+ Certainly
  + certainlyroote1
    DN: CN=Certainly Root E1, O=Certainly, C=US
工具/javac
? 通过在记录模式中拒绝 final 使 javac 与 Java 语言规范保持一致 (JDK-8317300)
JDK 21 在 Java 语言中引入了模式匹配。但是,允许在记录模式前面,例如 (),这是 Java 语言规范不允许的。javacfinalcase final R(...) ->

在 JDK21 中可能错误编译的程序现在将无法编译。此更改修复了编译器中的问题。受影响的用户需要移除关键字。finalfinal

Bug 修复
此版本还包含针对 Oracle 关键补丁更新中描述的安全漏洞的修复。

? 21.0.3 中修复的问题:
#    JBS公司    组件/子组件    总结
1    JDK-8319103型    客户端库/javax.swing    请求焦点的弹出窗口不会在带有 Wayland 的 Linux 上显示
2    JDK-8318590型    客户端库/javax.swing    JButton 在绘制 HTML 文本时忽略边距
3    JDK-8299058型    核心库/java.net    连接空闲时 sun.net.httpserver.ServerImpl 中的 AssertionError
4    JDK-8323659型    core-libs/java.util.concurrent    LinkedTransferQueue 添加和放置方法调用可重写的选件
5    JDK-8321480型    核心库/java.util:i18n    ISO 4217 修正案 176 更新
6    JDK-8314612型    热点/编译器    TestUnorderedReduction.java失败,并显示 -XX:MaxVectorSize=32 和 -XX:+AlignVector
7    JDK-8321542型    热点/编译器    C2:缺少 ChaCha20 存根x86_32导致崩溃
8    JDK-8313720型    热点/编译器    C2 SuperWord:-XX:+UseVectorCmov -XX:+UseCMoveUnconditionally 的错误结果
9    JDK-8321974型    热点/编译器    ciKlass::is_subtype_of 中崩溃,因为 TypeAryPtr::_klass 未初始化
10    JDK-8316661型    热点/编译器    CompilerThread 在非产品中动态停止编译器线程时泄漏 CodeBlob 内存
11    JDK-8321215型    热点/编译器    VSIB 寻址模式的 x86 指令编码不正确
12    JDK-8316594型    热点/编译器    C2 SuperWord:手动展开环的错误结果
13    JDK-8319879型    热点/编译器    用于随机化增量内联决策的压力模式
14    JDK-8309203型    热点/编译器    C2:删除 InterfaceSet 的 GrowableArray 的按值复制
15    JDK-8310844型    热点/编译器    [AArch64]C1 编译失败,因为 OSR 缓冲区中的监视器偏移量太大,无法立即进行
16    JDK-8319372型    热点/编译器    C2 编译失败,并显示“错误的直接支配者信息”
17    JDK-8321599型    热点/编译器    AVX3 Base64 解码中的数据丢失
18    JDK-8322321型    热点/运行时    添加 -XX:+VerifySharedSpaces 的手册页文档
19    JDK-8323243    热点/运行时    JNI 调用抽象实例方法会损坏堆栈
20    JDK-8320208型    security-libs/java.security    将公共后缀列表更新为 b5bf572
21    JDK-8318971型    工具/jar    在处理不存在的文件时更好地处理 jar 工具的错误
22    JDK-8305971型    工具/javac    JavacProcessingEnvironment 中缺少枚举构造函数主体的 NPE
23    JDK-8322040型    工具/javac    ClassReader.parameter 中缺少数组边界检查
24    JDK-8320145型    工具/javac    编译器应接受 Record Pattern 中的最终变量
25    JDK-8321582型    工具/javac    生成 <primitive-type>.class 未正确解析。
26    JDK-8321164型    工具/javac    带有注释处理器的 javac 抛出 AssertionError: Filling jrt:/...在 JarFileObject[/...] 期间
27    JDK-8322159型    工具/javac    ThisEscapeAnalyzer 因错误代码而崩溃

详细已解决、已删除、已知问题及注意事项请参考:https://www.oracle.com/java/technologies/javase/21-relnote-issues.html

人气软件
下载地址
相关文章
网友评论
下载声明

☉ 解压密码:www.jb51.net 就是本站主域名,希望大家看清楚,[ 分享码的获取方法 ]可以参考这篇文章
☉ 推荐使用 [ 迅雷 ] 下载,使用 [ WinRAR v5 ] 以上版本解压本站软件。
☉ 如果这个软件总是不能下载的请在评论中留言,我们会尽快修复,谢谢!
☉ 下载本站资源,如果服务器暂不能下载请过一段时间重试!或者多试试几个下载地址
☉ 如果遇到什么问题,请评论留言,我们定会解决问题,谢谢大家支持!
☉ 本站提供的一些商业软件是供学习研究之用,如用于商业用途,请购买正版。
☉ 本站提供的Java SE Development Kit(JDK) 21.0.3 LTS 官方正式版 Win64资源来源互联网,版权归该下载资源的合法拥有者所有。


http://www.vxiaotou.com