Java SE Development Kit(JDK) 21 LTS for Mac v21.0.10 官方正式版
- 大小:363MB
- 分类:开发软件
- 环境:Mac
- 更新:2026-01-22
热门排行
简介

Java 21 / JDK 21 已正式发布了,这是继 JDK 17 后的长期支持版本 (LTS),此版本带来了备受关注和瞩目的Virtual Threads,就是虚拟线程功能,根据官方介绍,虚拟线程的出现,确实是开启了并发编程的新纪元,轻量且高效,用更少的开销,处理更多的任务。
Java SE Development Kit(jdk) 21 Windows正式版:点击下载
Oracle 将为其提供至少八年的技术支持和更新。
根据 Oracle 免费条款和条件 (NFTC),JDK 21 二进制文件可在生产中免费使用,也可免费再分发。
JDK 21 将根据 NFTC 接受更新,直至 2026 年 9 月,即下一个 LTS 发布一年后。JDK 21 的后续更新将根据 Java SE OTN License (OTN) 授权,超出 OTN License 有限免费授权范围的生产使用将需要付费。
正式稳定功能
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(孵化器第六阶段)
主要新功能
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
更新日志:
Java™ SE Development Kit 21.0.10 (JDK 21.0.10)
2026年1月20日
本次更新的完整版本字符串为 21.0.10+8(“+” 表示“构建”)。 版本号是 21.0.10。该 JDK 符合 Java SE 规范第 21 版(JSR 396 2023-09-19)。
安全基线
JDK 21.0.10 发布时,Java 运行环境(JRE)的安全基线如下表所示:
Java 家族版本 安全基线(完整版本字符串)
21 21.0.10+8
17 17.0.18+8
11 11.0.30+7
8 1.8.0_481-b10
保持JDK的更新
Oracle 建议每次关键补丁更新时都要更新 JDK。 为了判断某个版本是否为最新,安全基线页面可以 用于确定每个发行家族的最新版本。
关键补丁更新包含安全漏洞修复,通常提前一年宣布 关键补丁更新、安全警报和公告。 不建议在下一次关键补丁更新后使用该 JDK(版本 21.0.10) 2026年4月21日。
Java管理服务面向所有用户,可以帮助你在系统中发现易受攻击的Java版本。Java SE 订阅用户和运行在 Oracle Cloud 中的客户可以使用 Java 管理服务更新 Java 运行时,并进行进一步的安全审查,比如识别 Java 程序中使用的潜在易受攻击的第三方库。现有的 Java 管理服务用户,点击这里登录您的仪表盘。Java 管理服务文档提供了一份对所有人开放的功能列表,以及仅对客户开放的功能。了解更多关于使用 Java 管理服务来监控和保护您的 Java 安装的信息。
Oracle JDK 21在NFTC下的可用性
Oracle JDK 21 LTS 于 2023 年 9 月发布,已根据自由 Java 许可证许可,并将持续使用直到后续 LTS 发布一年。Oracle 将 Oracle JDK 25 指定为 2025 年 9 月发布的长期支持(LTS)版本。因此,Oracle JDK 21 的更新版本将在 2026 年 9 月之后切换到 Java SE OTN 许可证,这也是我们提供 Java 8、11 和 17 更新的同一许可证。希望通过免费 Java 许可证接收 Oracle JDK 更新的用户应迁移到 Oracle JDK 25。
新功能
core-libs/java.rmi
➜ 默认启用端点识别,适用于TLS上的RMI连接 (JDK-8341496(非公开))
如果使用该类,RMI会使用TLS连接。这些连接现在默认启用了TLS端点识别。这可能导致一些之前正常工作的TLS连接出现故障。如果发生这种情况,确保服务器提供的证书具有与服务器主机名相匹配的主体替代名称。或者,客户端可以通过将系统属性设置为 来禁用 RMI TLS 连接的端点识别。javax.rmi.ssl.SslRMIClientSocketFactoryjdk.rmi.ssl.client.enableEndpointIdentificationfalse
其他注释
security-libs/javax.net.ssl
➜ 禁用了TLS 1.2和DTLS 1.2中的SHA-1握手签名 (JDK-8340321))
在TLS 1.2和DTLS 1.2握手签名中,SHA-1算法已被默认禁用,方法是在配置文件中添加安全属性。RFC 9155 弃用了 TLS 1.2 和 DTLS 1.2 数字签名中的 SHA-1。用户可自行承担风险,通过移除安全属性,重新启用 TLS 1.2 和 DTLS 1.2 握手签名中的 SHA-1 算法。"rsa_pkcs1_sha1 usage HandshakeSignature, ecdsa_sha1 usage HandshakeSignature, dsa_sha1 usage HandshakeSignature"jdk.tls.disabledAlgorithmsjava.security"rsa_pkcs1_sha1 usage HandshakeSignature, ecdsa_sha1 usage HandshakeSignature, dsa_sha1 usage HandshakeSignature"jdk.tls.disabledAlgorithms
安装/安装
➜ Windows 安装程序返回完整版本目录及交汇( JDK-8310932(非公开))
对于 JDK11+ LTS 系列,JDK 默认安装到特定版本的安装目录中。11+ 的安装目录在版本特定字符串前会有一个 - ,以保持与各家族过去 11+ 惯例的一致性。在“最新”目录中也会创建一个连接,Windows中也称为符号链接。它会指向该家族的最新版本。以下是安装和交汇点11+家族的详细示例:
版本 安装目录 交汇位置
jdk25.0.2 C:\Program Files\Java\jdk-25.0.2 C:\Program Files\Java\latest\jdk-25
JDK17.0.18 C:\Program Files\Java\jdk-17.0.18 C:\Program Files\Java\latest\jdk-17
jdk11.0.30 C:\Program Files\Java\jdk-11.0.30 C:\Program Files\Java\latest\jdk-11
每个交汇点始终指向匹配LTS家族中最新的JDK。当匹配LTS家族的最后一个JDK卸载时,每个家族的连接将被移除。
安装/安装
➜ 让jcmd命令在无头JDK RPM中可用 (JDK-8359443(非公开))
jcmd命令将以无头JDK RPM代替头头JDK RPM使用。
它将被加入替代组,而非替代方案组。javajavac
security-libs/javax.net.ssl
➜ 废TLS_RSA密码套件 (JDK-8245545)
TLS_RSA密码套件默认被禁用,方法是在java.security配置文件中的jdk.tls.disabledAlgorithms安全属性中添加“TLS_RSA_”。TLS_RSA密码套件不维护前向保密性,且不常用。一些TLS_RSA密码套件已经被禁用,因为它们使用了DES、3DES、RC4或NULL,这些都是被禁用的。此举会禁用所有剩余TLS_RSA密码套件。任何尝试使用以“TLS_RSA_”开头的密码套件都会因SSLHandshakeException而失败。用户可自行承担风险,通过从安全属性中移除“TLS_RSA_”来重新启用这些密码套件。以下先前启用的密码套件现已禁用:jdk.tls.disabledAlgorithms
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
core-libs/java.util:i18n
➜ 基于Debian的Linux(JDK-8345213)中默认时区检测的变 更)
在基于 Debian 的 Linux 发行版如 Ubuntu 上,该文件曾用于确定 JDK 的默认时区()。根据Debian的维基,现在是系统默认时区的主要来源,因此变得多余。因此,JDK的默认时区检测逻辑已更新为使用。如果和因任何原因不一致,JDK的默认时区现仅基于档案确定。/etc/timezoneTimeZone.getDefault()/etc/localtime/etc/timezone/etc/localtime/etc/timezone/etc/localtime/etc/timezone/etc/localtime
security-libs/java.security
➜ 证书权威信息访问扩展 (JDK-8368032(非公开))中URI的过滤规则
引入了一个新的系统和安全属性,, ,该属性允许用户定义一个或多个过滤规则,应用于X.509证书上权威信息访问扩展获得的URI。这些过滤规则专门应用于CA发行机构的访问方式。任何CA发行者在X.509证书中的URI只有在系统属性被启用且过滤器允许该URI时才会被跟踪。com.sun.security.allowedAIALocationscom.sun.security.enableAIAcaIssuers
为了设置规则,用户必须以同名设置安全属性或系统属性。如果系统属性有值,它会覆盖安全属性。默认情况下,该属性为空,这会执行一个拒绝所有规则集。com.sun.security.allowedAIALocations
对于任一性质,取值由一组空间分离规则组成,这些规则以URI的形式出现,具有以下约束条件:
URI必须是绝对且层级分明的。
URI只能使用以下方案之一:http、https、ldap或ftp(不区分大小写)。
必须指定主机名或地址,并且必须匹配(不区分大小写)。主机名不进行名称解析以匹配URI与IP地址。
端口号必须匹配。如果省略了端口号,则在比较中使用已知端口。
对于分层方案(http[s], ftp):
规则中URI中归一化路径部分以大小写区分方式匹配。如果最后一个组件不以斜杠(/)结尾,则视为文件路径,必须与CA发行器URI路径组件匹配。如果规则的路径组件以斜杠结尾,则必须与CA发行器URI路径组件的前缀相匹配或为前缀。(例如,的滤波路径将匹配CA的发行者路径,且。)/ab/cd//ab/cd//ab/cd/ef/ab/cd/ef/ghi
匹配CA发行者URI时,查询字符串和片段将被忽略。
对于LDAP的URI:
基础DN必须完全匹配(不区分大小写)。
规则中的任何查询字符串(如果指定)将被忽略。
对于属性,单个值为“任意”(大小写不区分)将生成一个允许所有规则。
漏洞修复
本版本还包含了 Oracle 关键补丁更新中描述的安全漏洞修复。
➜ 21.0.10修复的问题:
# JBS 组件/子组件 摘要
1 JDK-8334509 client-libs/2d 取消 PageDialog 不会返回相同的 PageFormat 对象
2 JDK-8361748 client-libs/2d 对 XBM 映像大小设定限制
3 JDK-8324491 client-libs/java.awt 如果键盘布局在对话激活时被更改,键盘布局就不会保持状态
4 JDK-8354646 client-libs/java.awt java.awt.TextField 允许在双击文字开头和结尾时识别密码中的空格
5 JDK-8350813 client-libs/javax.sound 从MIDI序列渲染庞大音色库可能导致OutOfMemoryError(内存缺失错误)
6 JDK-8140527 client-libs/javax.swing JinternalFrame的标题按钮宽度不正确
7 JDK-8139228 client-libs/javax.swing JFileChooser 将文件名渲染为 HTML 文档
8 JDK-8358532 client-libs/javax.swing GTK L&F 中的 JFileChooser 仍然显示 HTML 文件名
9 JDK-8210807 client-libs/javax.swing 用 JScrollPane 打印 JTable 打印的表格时,没有填充行
10 JDK-8322135 client-libs/javax.swing 在 Windows L&F 中打印 JTable 会触发 InternalError:HTHEME 为空
11 JDK-8349188 client-libs/javax.swing LineBorder 的缩放不正确
12 JDK-8358813 client-libs/javax.swing JPasswordField 通过删除快捷方式识别密码中的空格
13 JDK-8370465 client-libs/javax.swing MenuItem 组件从右向左向的问题
14 JDK-8365086 core-libs/java.net CookieStore.getURIs() 和 get(URI) 应该返回一个不可变的列表
15 JDK-8369184 core-libs/java.util:i18n 对于不同哈希码值的不相等实例,SimpleTimeZone 等于 () 返回为真
16 JDK-8328085 热点/编译器 C2:免费后在PhaseChaitin使用::Register_Allocate()
17 JDK-8364993 热点/JFR JFR:关闭JDK。default.jfc 中的 ModuleExport
18 JDK-8364556 热点/JFR JFR:在default.jfc中禁用SymbolTableStatistics和StringTableStatistics
19 JDK-8328997 热点/运行时 移除 GrowableArray 中不必要的模板参数列表
20 JDK-8317132 热点/运行时 准备允许的热点——
21 JDK-8361447 热点/运行时 [重做]已检查的 JNI 版本 Release<type>ArrayElements 需要过滤掉已知的包裹数组
22 JDK-8364235 热点/运行时 JDK-8361447 修复后,GuardedMemory 的对齐要求失效
23 JDK-8302744 热点/运行时 重构热点容器检测代码
24 JDK-8364660 热点/运行时 ClassVerifier::ends_in_athrow() 应该被移除
25 JDK-8306579 基础设施/其他 考虑用 /Zc:throwingNew 来构建
26 JDK-8342958 性能/库 在微基准测试中持续使用 jvmArgs
27 JDK-8317332 security-libs/java.security 准备允许的安保——
28 JDK-8325680 security-libs/org.ietf.jgss deleteGSSCB 中的未初始化内存 GSSLibStub.c:179
29 JDK-8365790 tools/jpackage 应用程序映像的关闭钩子在 Windows 上无法使用













chrome下载
知乎下载
Kimi下载
微信下载
天猫下载
百度地图下载
携程下载
QQ音乐下载