本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
【腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
JDK 25.0.3 在五一之前就正式发布了,同期整个 Java 生态的发布也很密集。跟着发布的还有 JDK 26.0.1、Spring 7.0.7、Spring Boot 4.0.6 等版本,同时 AI 各大模型厂商也在 4 月底扎堆上新,还伴随着各种 token 收费策略上的调整,可写话题和内容非常多。当时也有网友在评论区留言要看 JDK 25.0.3 的发布内容,我拖到了今天给大家安排上,写一写 JDK 25.0.3 方面的安全加固、GC 升级与开发体验优化全解析等。
文章配图参见 https://mp.weixin.qq.com/s/c1c0o6cI0ekYWGAc_HlwMw。
27 个 Bug 修复
为什么这次更新值得关注?因为 JDK 25.0.3 包含了 27 个 Bug 修复、4 项新特性、1 个证书黑名单等内容。
时间拨回 2026 年 4 月 21 日,Oracle 正式发布了JDK 25.0.3,完整版本号为 25.0.3+9。作为 Java 25 这一 LTS(长期支持)版本的第三个更新补丁,本次发布不仅包含常规的安全漏洞修复,还引入了多项影响开发体验和生产环境稳定性的重要改进。
值得注意的是,Oracle 官网也明确建议,JDK 25.0.3 不应在 2026 年 7 月 21 日的下一个关键补丁更新(CPU)之后继续使用。这也意味着对于生产环境而言,及时跟进版本更新是保障系统安全的必要措施。
四大新特性深度解读
下面,我们针对 4 项新特性方面,稍微展开一下。
UseGCOverheadLimit
现在,G1 垃圾收集器支持 UseGCOverheadLimit(JDK-8212084)了,这是本次更新中最受关注的性能相关改进。
此前,-XX:+UseGCOverheadLimit 参数仅获得 Parallel GC 支持,用于防止应用程序因过度 GC 导致系统“假死”。现在,G1 垃圾收集器也正式支持这一机制。
具体来说,这一机制特征如下所示。
- 触发条件:当连续 5 次 GC 的开销超过
GCTimeLimit(默认 98%),且堆空闲空间低于GCHeapFreeLimit(默认 2%)时 - 行为:直接抛出
OutOfMemoryError,避免无效的资源消耗 - 默认状态:已启用,可通过
-XX:-UseGCOverheadLimit关闭
官方和老外网友通过实践建议,对于使用 G1 的生产应用,建议保留此功能开启。它与 Parallel GC 的实现逻辑基本一致,但 G1 对 GC 开销和堆空闲的计算方式略有差异,迁移时需留意监控阈值的变化。
keytool 密码输入安全性增强
JDK-8354469 是一个看似微小但影响广泛的安全修复。
keytool、jarsigner 以及 JAAS 的 TextCallbackHandler 在读取密码时,依赖系统控制台来隐藏输入。但当标准输出被重定向到文件或管道时,控制台不可用,密码会以明文回显在屏幕上,这在自动化脚本和 CI/CD 流水线中是非常常见的场景。
JDK 25.0.3 针对这些场景,改进了密码读取机制,即使在 stdout 被重定向的情况下,也能确保密码不回显。
值得注意的是,如果你在使用 keytool 的自动化脚本中曾通过 echo 或文件传递密码,现在是时候检查并升级这些脚本了。
src.zip 包含安全组件源码
JDK-8369608 是一个调试体验的重大提升,src.zip 终于包含安全组件源码了。
长期以来,Oracle JDK 分发的<java-home>/lib/src.zip中不包含 JCE(Java Cryptography Extension)、JGSS(Java Generic Security Service)和 JSSE(Java Secure Socket Extension)的源代码。这意味着开发者在 IDE 中调试涉及加密、TLS、Kerberos 的代码时,只能看到反编译的 class 文件,无法直接阅读原始源码。
JDK 25.0.3 将这些安全组件的源码纳入src.zip,调试工具现在可以直接展示大部分安全相关的源文件。
对于不涉及底层加密等相关业务的开发者来说,可以不用关注这一条。
新增 JCE 层算法禁用属性
JDK-8244336 新增了 JCE 层算法禁用属性,更细粒度的密码学算法管控。
其主要新增了安全属性jdk.crypto.disabledAlgorithms,允许在JCE/JCA 层(而非仅 TLS 层)统一禁用特定算法。目前支持的服务类型包括:
- Cipher(加密算法)
- KeyStore(密钥库)
- MessageDigest(消息摘要)
- Signature(数字签名)
默认情况下未禁用任何算法,但可通过 java.security 文件或同名系统属性进行配置。
对于的配置示例如下所示。
jdk.crypto.disabledAlgorithms=MD5, SHA1
这对于需要满足特定合规要求(如 FIPS)的企业应用尤为重要。
关键安全更新与漏洞修复
JDK 25.0.3 是一个小版本更新,这个更新设计到安全和漏洞方面的必不可少,下面我们挑选几个重要的来看看。
中华电信根证书信任策略调整
JDK-8369282 是一个中华电信根证书信任策略调整方面的更新,其与 Google Chrome 和 Mozilla Firefox 的步调一致,JDK 25.0.3 不再信任 2026 年 3 月 17 日之后签发且由中华电信(Chunghwa Telecom)根证书锚定的 TLS 服务器证书。
影响范围包括使用 OU=ePKI Root Certification Authority, O="Chunghwa Telecom Co., Ltd.", C=TW 签发的证书。
对于已有的证书,在 2026-03-17 之前签发的证书在到期前仍被信任。
如果更新后需临时恢复,可从 java.security 中移除 CHUNGHWA_TLS 策略。
如果大家的应用对接了台湾地区的 ePKI 服务,建议立即检查证书链,避免连接中断。
IANA 时区数据更新至 2026a
此项更新包含多项时区规则修正,重点包括:
- 摩尔多瓦:自 2022 年起采用欧盟过渡时间规则
- 下加利福尼亚:1976 年前的时间数据修正
- 闰秒处理:默认不再安装 “right” TZif 文件,可通过
-DTZ_RUNTIME_LEAPS=0禁用运行时闰秒支持 - FreeBSD 兼容性:多项代码级适配
27 项具体 Bug 修复精选
| 编号 | 组件 | 问题描述 | 影响 |
|---|---|---|---|
| JDK-8373727 | 2D 图形 | XBM 图像解析器回归:仅解析首行位图 | 影响 XBM 格式图标渲染 |
| JDK-8373290 / 8379158 | 2D 图形 | FreeType 升级至 2.14.1/2.14.2 | 字体渲染稳定性提升 |
| JDK-8372756 | AWT | XWayland GNOME ≥47 鼠标侧键和水平滚动失效 | Linux 桌面用户体验修复 |
| JDK-8372534 / 8375063 | AWT | Libpng 升级至 1.6.51/1.6.54 | 图像安全漏洞修复 |
| JDK-8369227 | 核心库 | 虚拟线程卡在 PARKED 状态 | 高并发应用稳定性 |
| JDK-8372835 | 并发 | WorkQueue::push 缺少 acquire-fence | 内存可见性保证 |
| JDK-8373525 | 编译器 | C2: assert(_base == Long) 失败 | JIT 编译稳定性 |
| JDK-8358801 | 编译器 | javac 生成无法通过验证器的类文件 | 字节码正确性 |
| JDK-8375549 | 安全库 | jdk.crypto.disabledAlgorithms 多条目并发修改异常 | 配置热更新安全 |
| JDK-8336695 | XML | Commons BCEL 升级至 6.10.0 | XML 处理安全加固 |
完整列表可参考 Oracle 官方 Release Notes,不在一一展开细说。
已知问题与平台适配
SLES 16 桌面环境需额外安装包
在 SUSE Linux Enterprise Server 16 的完整桌面安装中,默认不包含 xdg-desktop-portal-gnome 包了,这会导致所有 JDK 桌面应用(Swing/AWT)无法正常运行。
对应的解决方案为手动安装一下依赖。
sudo zypper install xdg-desktop-portal-gnome
sudo reboot now
此问题影响所有 Oracle JDK 版本,非 JDK 25.0.3 独有。
版本安全基线与升级建议
Oracle 同时更新了各版本家族的安全基线:
| Java 家族版本 | 安全基线版本 |
|---|---|
25 (LTS) | 25.0.3+9 当前最新 |
| 21 (LTS) | 21.0.11+9 |
| 17 (LTS) | 17.0.19+9 |
| 11 (LTS) | 11.0.31+9 |
| 8 | 1.8.0_491-b10 |
升级建议
- 生产环境(使用 JDK 25):建议尽快升级至 25.0.3,特别是涉及 TLS 证书链和加密算法管控的系统
- 仍在使用 JDK 21/17:可按计划跟随各自的 CPU 周期升级,但需关注 7 月 21 日的下一个补丁日
- 开发环境:利用
src.zip包含安全源码的便利,提升调试效率 - 使用 G1 GC 的应用:评估
UseGCOverheadLimit的默认开启对现有监控告警阈值的影响
最后
JDK 25.0.3 作为 LTS 版本的维护性更新,没有引入颠覆性的语言特性,但它在安全加固、GC 稳定性、开发体验三个维度都提供了扎实的改进。
特别是 G1 的 UseGCOverheadLimit 支持,标志着 Oracle 在统一各 GC 行为一致性上的持续努力;而安全组件源码的开放,则体现了对开发者调试体验的重视。
总的来说,Java 发它发,依旧有人使用 Java 8。

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!