Java基础、中级、高级、架构面试资料

JDK 25.0.3 发布,G1 GC 新增摆烂检测,27 个 Bug、4 项新特性

JAVA herman 66浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日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 是一个看似微小但影响广泛的安全修复

keytooljarsigner 以及 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-83737272D 图形XBM 图像解析器回归:仅解析首行位图影响 XBM 格式图标渲染
JDK-8373290 / 83791582D 图形FreeType 升级至 2.14.1/2.14.2字体渲染稳定性提升
JDK-8372756AWTXWayland GNOME ≥47 鼠标侧键和水平滚动失效Linux 桌面用户体验修复
JDK-8372534 / 8375063AWTLibpng 升级至 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-8336695XMLCommons BCEL 升级至 6.10.0XML 处理安全加固

完整列表可参考 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
81.8.0_491-b10

升级建议

  1. 生产环境(使用 JDK 25):建议尽快升级至 25.0.3,特别是涉及 TLS 证书链和加密算法管控的系统
  2. 仍在使用 JDK 21/17:可按计划跟随各自的 CPU 周期升级,但需关注 7 月 21 日的下一个补丁日
  3. 开发环境:利用 src.zip 包含安全源码的便利,提升调试效率
  4. 使用 G1 GC 的应用:评估 UseGCOverheadLimit 的默认开启对现有监控告警阈值的影响

最后

JDK 25.0.3 作为 LTS 版本的维护性更新,没有引入颠覆性的语言特性,但它在安全加固、GC 稳定性、开发体验三个维度都提供了扎实的改进。

特别是 G1 的 UseGCOverheadLimit 支持,标志着 Oracle 在统一各 GC 行为一致性上的持续努力;而安全组件源码的开放,则体现了对开发者调试体验的重视。

总的来说,Java 发它发,依旧有人使用 Java 8。

业余草公众号

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

本文原文出处:业余草: » JDK 25.0.3 发布,G1 GC 新增摆烂检测,27 个 Bug、4 项新特性