Java SE Development Kit(JDK) 21.0.11 LTS 官方正式版 Win64
- 大小:164MB
- 分类:编程工具
- 环境:Windows
- 更新:2026-04-22
热门排行
简介

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 Development Kit 21,更新 21.0.11 (JDK 21.0.11)
上映日期:2026年4月21日
本次更新的完整版本字符串为 21.0.11+9(“+” 表示“构建”)。 版本号是 21.0.11。该 JDK 符合 Java SE 规范第 21 版(JSR 396 2023-09-19)。
IANA TZ 数据 2026a
JDK 21.0.11包含2026a年IANA时区数据,其中包含以下变更:
为兼容FreeBSD做了若干代码修改。
唯一变化的数据是下加利福尼亚的闰秒表到期时间和1976年前的时间。
摩尔多瓦自2022年以来一直采用欧盟过渡时间。
“正确”的TZif文件默认不再安装。
-DTZ_RUNTIME_LEAPS=0 禁用了对闰秒的运行时支持。
TZif 文件不再限制为 50 字节的缩写。
Zic不再受限于50闰秒。
已经修复了几个整数溢出的漏洞。
更多信息请参阅JRE软件中的时区数据版本。
保持JDK的更新
Oracle 建议每次关键补丁更新时都要更新 JDK。 为了判断某个版本是否为最新,安全基线页面可以 用于确定每个发行家族的最新版本。
关键补丁更新包含安全漏洞修复,通常提前一年宣布 关键补丁更新、安全警报和公告。 不建议在下一次关键补丁更新后使用该 JDK(版本 21.0.11) 2026年7月21日。
Java管理服务面向所有用户,可以帮助你在系统中发现易受攻击的Java版本。Java SE 订阅用户和运行在 Oracle Cloud 中的客户可以使用 Java 管理服务更新 Java 运行时,并进行进一步的安全审查,比如识别 Java 程序中使用的潜在易受攻击的第三方库。现有的 Java 管理服务用户,点击这里登录您的仪表盘。Java 管理服务文档提供了一份对所有人开放的功能列表,以及仅对客户开放的功能。了解更多关于使用 Java 管理服务来监控和保护您的 Java 安装的信息。
新功能
security-libs/javax.net.ssl
➜ TLSv1.3 可配置新会话票数 (JDK-8328608)
一个新的系统属性 ,设定了每个会话由 JSSE 服务器发送的 TLSv1.3 恢复工单数量。它可以在命令行设置,设置为 ,范围从 0 到 10。默认是1。jdk.tls.server.newSessionTicketCount-Djdk.tls.server.newSessionTicketCount=##
更多详情请参见“定制JSSE”。
security-libs/java.security
➜ 增强的密钥工具密码处理,输出被重定向 时(JDK-8354469)
(链接未找到)命令会读取系统控制台的密码,以防止密码显示在屏幕上。然而,控制台通常只有在标准输入和输出流都未被重定向时才可用。此前,如果标准输出流被重定向到文件或其他命令,控制台将不可用,输入密码会在屏幕上回响。这一改进改进了密码处理,确保即使标准输出流被重定向,密码也不会显示在屏幕上。这一改进也对(未找到链接)命令和JAAS TextCallbackHandler API进行了改进。keytooljarsigner
热点/网关
➜ G1:支持 UseGCOverheadLimit (JDK-8212084)
当垃圾回收开销超过百分比(默认值)且空闲的Java堆低于百分比(默认值)时,G1垃圾回收器会抛出(OOME),连续五次垃圾回收。OutOfMemoryExceptionGCTimeLimit98GCHeapFreeLimit2
此功能默认启用。可以通过该选项禁用。-XX:-UseGCOverheadLimit
实现方式与并行垃圾回收器已有的功能相呼应。然而,OOME触发器的具体条件可能存在差异,因为G1对垃圾回收开销和自由Java堆的计算略有不同。
security-libs/java.security
➜ Oracle JDK src.zip 文件现在包含了 JSSE/JCE/JGSS 组件的源代码 (JDK-8369608)
随Oracle JDK一起分发的文件现在包含了JCE、JGSS和JSSE的源代码。调试工具现在可以检查或显示大部分安全源文件。<java-home>/lib/src.zip
security-libs/java.security
➜ 新的安全属性 jdk.crypto.disabled 用于限制 JCE 层 算法的算法(JDK-8244336)
引入了一个新的安全属性,用于禁用 JCE/JCA 加密服务的算法。最初,该属性仅支持密码、密钥存储、消息摘要和签名服务。该属性在文件中定义,初始默认不会禁用任何算法。不过,未来情况可能会有所变化。如果应用程序需要重新启用算法,该安全属性可以被同名的系统属性覆盖。jdk.crypto.disabledAlgorithmsjava.security
更多信息请参见禁用和受限加密算法。
已知问题
client-libs/java.awt
➜ SLES 16 需要安装非默认软件包才能运行 AWT 应用程序 (JDK-8378839(非公开))
完整的 SuSE Enterprise Linux Server,简称 SLES,16 版桌面安装不包含一个包,而 是 JDK 桌面应用完全运行所必需的。这适用于所有Oracle JDK版本。xdg-desktop-portal-gnome
用户应使用标准的SLES软件包仓库命令安装该包,例如执行:
% sudo zypper install xdg-desktop-portal-gnome
% sudo reboot now
其他注释
security-libs/java.security
➜ 不信任以中华根证书为锚点并于2026年3月17日之后发布的TLS服务器证书 (JDK-8369282)
JDK将停止信任2026年3月17日之后发布、以中华根证书为锚点的TLS服务器证书,这与谷歌和Mozilla宣布的类似计划一致。
2026年3月17日或之前发布的TLS服务器证书将继续被信任,直到证书到期。在该日期之后签发的证书,并由下表中列出的证书授权机构锚定的证书将被拒绝。
这些限制在 Java 安全套接字扩展(JSSE)API 的 JDK 实现(提供者)中得到执行。如果服务器的证书链由下表中的任何证书授权机构锚定,且证书在2026年3月17日之后签发,则TLS会话不会进行协商。SunJSSE
应用程序会收到一个异常,提示信任锚点不被信任,例如:
"TLS Server certificate issued after 2026-03-17 and anchored by a distrusted legacy Chunghwa root CA: OU=ePKI Root Certification Authority, O="Chunghwa Telecom Co., Ltd." C=TW"
JDK 可以通过在配置文件中删除安全属性中的“CHUNGHWA_TLS”来重新信任这些证书。jdk.security.caDistrustPoliciesjava.security
这些限制适用于JDK中包含的以下忠华根证书:
根证书在2026-03-17之后被不信任
杰出名称 SHA-256 指纹
OU=ePKI根认证机构,O=“中华电信有限公司”,C=TW C0:A6:F4:DC:63:A2:4B:FD:CF:54:EF:2A:6A:08:2A:0A:72:DE:35:80:3E:2F:F5:FF:52:7A:E5:D8:72:06:DF:D5
你也可以使用JDK的工具打印证书链的详细信息,具体如下:keytool
keytool -v -list -alias <your_server_alias> -keystore <your_keystore_filename>
如果链中任何证书由表中某个根CA签发,输出中列出,你需要更新证书或联系管理服务器的组织。
修复
本版本还包含了 Oracle 关键补丁更新中描述的安全漏洞修复。
➜ 25.0.3 修复的问题:
# JBS 组件/子组件 摘要
1 JDK-8373727 client-libs/2d 新的 XBM 图像解析器回归:仅解析位图数组的第一行
2 JDK-8373290 client-libs/2d 更新FreeType至2.14.1
3 JDK-8379158 client-libs/2d 更新FreeType至2.14.2
4 JDK-6899304 client-libs/java.awt java.awt.Toolkit.getScreenInsets(GraphicsConfiguration) 返回错误的值
5 JDK-8372756 client-libs/java.awt 在 XWayland GNOME 上,鼠标附加按钮和横向滚动功能被破坏 >= 47,之后是 JDK-8351907
6 JDK-8372534 client-libs/java.awt 更新 Libpng 至 1.6.51
7 JDK-8372048 client-libs/java.awt Linux 远程桌面的性能提升
8 JDK-8375063 client-libs/java.awt 更新 Libpng 至 1.6.54
9 JDK-8372977 client-libs/java.awt 不必要的 gthread-2.0 加载
10 JDK-8366261 core-libs/java.io 提供 sun.security.util.Password 的实用方法
11 JDK-8343377 core-libs/java.lang:reflect 反映性调用原生方法的性能回归
12 JDK-8301875 core-libs/java.util java.util.TimeZone.getSystemTimeZoneID 使用 C 库默认文件模式
13 JDK-8373525 热点/编译器 C2: 断言(_base == 长) 失败:不长
14 JDK-8370325 热点/网关 G1:禁止为TLAB分配而进行GC
15 JDK-8365972 热点/JFR JFR:ThreadDump 和 ClassLoaderStatistics 事件可能导致连续轮换
16 JDK-8322420 热点/运行时 [Linux] cgroup v2:父嵌套控制组的限制未检测到
17 JDK-8331560 热点/运行时 重构热点容器检测代码,使子系统委派给控制器
18 JDK-8341644 热点/运行时 使用工具链 Clang 时 cgroup 编码中的编译错误
19 JDK-8343191 热点/运行时 Cgroup v1 子系统未能设置子系统路径
20 JDK-8261242 热点/运行时 [Linux]OSContainer::is_containerized() 在容器外运行时返回 true。
21 JDK-8365526 热点/运行时 空符号崩溃,符号传递给SystemDictionary::resolve_or_null
22 JDK-8347811 热点/运行时 cgroups v2 的容器检测代码应使用 cgroup.controllers
23 JDK-8349988 热点/运行时 更改 cgroup 版本检测逻辑,使其不依赖于 /proc/cgroups
24 JDK-8354878 热点/运行时 CgroupSubsystemFactory::d etermine_type of cgroupSubsystem_linux.cpp:300 中的文件泄漏
25 JDK-8375549 security-libs/java.security 如果 jdk.crypto.disabledAlgorithms 有多个已知 oid 的条目,则使用 ConcurrentModificationException
26 JDK-8374555 security-libs/java.security 当不从 System.in 读取时,s.s.u.Password中无需显示输入警告
27 JDK-8334670 security-libs/javax.net.ssl SSLSocketOutputRecord 缓冲区计算错误
28 JDK-8311644 security-libs/javax.net.ssl 当客户端未发送任何证书时,服务器不应发送bad_certificate警报
29 JDK-8336695 XML/Jaxp 更新 Commons BCEL 至 6.10.0 版本













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