Java 21 发行说明总结
原文地址:https://www.oracle.com/java/technologies/javase/21all-relnotes.html
JDK 21 发行说明总结
概述
本页面包含所有 JDK 21 通用可用性 (GA) 版本的发行说明,包括 JDK 21.0.8 到 JDK 21.0.1 的所有版本。
JDK 21.0.8 (GA 和 BPR 构建)
Java SE 21.0.8 捆绑补丁版本 (BPR) - 错误修复和更新
2025年7月25日,版本 21.0.8.0.2
- 错误修复
- JDK-8358764: (sc) 当线程在读取时被阻塞时,SocketChannel.close 导致连接重置 (win)
2025年7月15日,版本 21.0.8.0.1
- 错误修复
- JDK-8355072 (非公开): (install) 在 systemd 环境中的 [OL9] java 安装缺少本机 systemd 单元文件
完整版本字符串
- 21.0.8+12 ("+" 表示构建)
- 符合 Java SE 规范 21 版 (JSR 396 2023-09-19)
IANA 时区数据 2025b
- 新增智利艾森地区时区,从 -04/-03 改为 -03
安全基线
- Java 运行时环境 (JRE) 的安全基线:
- Java 21: 21.0.8+12
- Java 17: 17.0.16+12
- Java 11: 11.0.28+12
- Java 8: 1.8.0_461-b11
重要更新
- 移除的功能和选项
- 移除过期的 Baltimore CyberTrust 根证书
- 移除两个 Camerfirma 根证书
- 新增功能和更新
- 添加了 4 个来自 Sectigo Limited 的新根证书
- 更新了 HarfBuzz、FreeType、PipeWire 和 Libpng 等库
- 改进了 HTTP/2 流控制错误的报告
- 更新了 HSS/LMS 公钥编码格式
- 增强了 OCSP 超时属性与 OCSP 超时的兼容性
- Jarsigner 在移除签名条目时会打印警告
错误修复
- 修复了 33 个问题,包括客户端库、核心库、HotSpot 编译器和运行时、安全管理等方面的改进。
JDK 21.0.7 (GA 和 BPR 构建)
Java SE 21.0.7 捆绑补丁版本 (BPR) - 错误修复和更新
2025年6月27日,版本 21.0.7.0.1
- 错误修复
- JDK-8332506: hotspot: runtine: SIGFPE 在 ObjectSynchronizer::is_async_deflation_needed()
完整版本字符串
- 21.0.7+8
IANA 时区数据 2025a
- 巴拉圭从2024年春季开始永久采用 -03 时区
- 改进了菲律宾1991年以前的数据
安全基线
- Java 运行时环境 (JRE) 的安全基线:
- Java 21: 21.0.7+8
- Java 17: 17.0.15+9
- Java 11: 11.0.27+8
- Java 8: 1.8.0_451-b10
重要更新
- 新功能
- 增强了对旧版 Camerfirma 根证书的不信任处理
- 其他更新
- 更新了 FreeType 和 Libpng 等库
- 改进了 Parallel GC 的大对象分配处理
错误修复
- 修复了 61 个问题,包括客户端库、核心库、HotSpot 编译器和运行时、安全管理等方面的改进。
JDK 21.0.6 (GA)
发布日期:2025年1月21日
IANA 时区数据 2024b
- 改进了墨西哥、蒙古和葡萄牙的历史数据
安全基线
- Java 运行时环境 (JRE) 的安全基线:
- Java 21: 21.0.6+8
- Java 17: 17.0.14+8
- Java 11: 11.0.26+7
- Java 8: 1.8.0_441-b07
重要更新
- 核心库
- ProcessBuilder 在 Windows 上引用包含任何空格字符的参数字符串
- 时间库
- 支持时间区数据库 2024b
错误修复
- 修复了 31 个问题,包括客户端库、核心库、HotSpot 编译器和运行时等方面的改进。
JDK 21.0.5 (GA)
发布日期:2024年10月15日
IANA 时区数据 2024a
安全基线
- Java 运行时环境 (JRE) 的安全基线:
- Java 21: 21.0.5+9
- Java 17: 17.0.13+10
- Java 11: 11.0.25+9
- Java 8: 1.8.0_431-b10
重要更新
- 安全管理
- 添加了线程和时间戳选项的 java.security.debug 系统属性
- 核心库
- 更新了 GIFlib、Libpng、JQuery 等库
错误修复
- 修复了 61 个问题,包括客户端库、核心库、HotSpot 编译器和运行时等方面的改进。
JDK 21.0.4 (GA)
发布日期:2024年7月16日
IANA 时区数据 2024a
安全基线
- Java 运行时环境 (JRE) 的安全基线:
- Java 21: 21.0.4+8
- Java 17: 17.0.12+8
- Java 11: 11.0.24+7
- Java 8: 8u421-b09
重要更新
- 安全管理
- 添加了新的安全类别 -XshowSettings 启动器选项
- 垃圾收集
- G1: 平衡垃圾收集期间的代码根扫描阶段
- Parallel: 精确并行扫描大对象数组以进行年轻代收集
错误修复
- 修复了 73 个问题,包括客户端库、核心库、HotSpot 编译器和运行时等方面的改进。
JDK 21.0.3 (GA)
发布日期:2024年4月16日
IANA 时区数据 2023c
安全基线
- Java 运行时环境 (JRE) 的安全基线:
- Java 21: 21.0.3+7
- Java 17: 17.0.11+7
- Java 11: 11.0.23+7
- Java 8: 8u411-b09
重要更新
- 网络库
- 支持 Windows 平台的 TCP_KEEPxxxx 扩展套接字选项
- 核心库
- BasicFileAttributes.creationTime 在 Linux 上返回文件的创建时间
错误修复
- 修复了 73 个问题,包括客户端库、核心库、HotSpot 编译器和运行时等方面的改进。
JDK 21.0.2 (GA)
发布日期:2024年1月16日
IANA 时区数据 2023c
安全基线
- Java 运行时环境 (JRE) 的安全基线:
- Java 21: 21.0.2+13
- Java 17: 17.0.10+11
- Java 11: 11.0.22+9
- Java 8: 8u401-b10
重要更新
- 安全管理
- 添加了四个 DigiCert 根证书
- 添加了三个 eMudhra Technologies Limited 根证书
- 添加了 Telia Root CA v2 证书
- 添加了 ISRG Root X2 CA 证书
错误修复
- 修复了 73 个问题,包括客户端库、核心库、HotSpot 编译器和运行时等方面的改进。
JDK 21.0.1 (GA)
发布日期:2023年10月17日
IANA 时区数据 2023c
安全基线
- Java 运行时环境 (JRE) 的安全基线:
- Java 21: 21.0.1+12
- Java 17: 17.0.9+11
- Java 11: 11.0.21+9
- Java 8: 8u391-b13
重要更新
- 安全管理
- 添加了 Certigna 根证书
- 增加了 jdk.jar.maxSignatureFileSize 系统属性的默认值
错误修复
- 修复了 40 个问题,包括客户端库、核心库、HotSpot 编译器和运行时等方面的改进。
JDK 21 (GA)
发布日期:2023年9月19日
重大新功能
- 语言特性
- 记录模式
- switch 表达式的模式匹配
- 预览功能
- 字符串模板(预览)
- 未命名模式和变量(预览)
- 未命名类和实例主方法(预览)
- 库改进
- 虚拟线程
- 序列化集合
- 密钥封装机制 API
- 性能改进
- 扩展 ZGC 以维护年轻对象和旧对象的单独代
- 管理
- 准备禁止动态加载代理
重要更新
- 核心库
- Runtime.exec 和 ProcessBuilder 命令参数日志记录
- System.exit() 和 Runtime.exit() 日志记录
- Math.clamp() 和 StrictMath.clamp() 方法
- 安全管理
- 增强的 OCSP、证书和 CRL 获取超时
- 支持 HSS/LMS 签名验证
移除的功能和选项
- 核心库
- 移除了 java.io.File 的规范路径缓存
- 移除了 java.lang.ThreadGroup.allowThreadSuspension
- 移除了 java.lang.Compiler 类
弃用的功能和选项
- 客户端库
- GTK2 弃用
- 核心库
- com.sun.nio.file.SensitivityWatchEventModifier 弃用
已知问题
- 核心库
- 对 ZIP64 额外字段的验证
- HotSpot 编译器
- 使用 ZGC 和非默认 ObjectAlignmentInBytes 时可能导致 JVM 崩溃或错误执行
其他说明
- Oracle JDK 和 OpenJDK 的区别
- Oracle JDK 提供安装程序、使用日志、对第三方加密提供者的签名要求等
- OpenJDK 仅提供压缩存档