JDK 25最新版本发布包含4 项新特性
2026/5/8 8:32:30 网站建设 项目流程

JDK 25最新版本发布包含4 项新特性

2026 年 5 月,JDK 25 迎来首个季度更新版本25.0.3,共修复27 个 Bug,引入4 项新特性。最大的亮点是 G1 GC 新增了退化 GC 主动检测机制——也就是被开发者戏称为"摆烂检测"的智能预警功能。本文带你快速了解这次更新的核心内容。


一、G1 GC "摆烂检测"是什么

1.1 退化 GC 的痛苦

G1(Garbage-First)垃圾收集器在正常情况下表现出色,但当堆内存接近极限、对象分配速率远超 GC 回收速率时,G1 会进入一种"拼命干活但永远干不完"的恶性循环:

  • Young GC 刚结束,马上又触发
  • 混合 GC 连续运行,老年代清不掉
  • 用户线程几乎无法推进,应用延迟飙升

这种状态在社区里有一个形象的名字——摆烂(Degenerate GC)。以前遇到这种情况,G1 只能被动挨打,等到 OOME 才认输。

1.2 主动检测,优雅认输

JDK 25.0.3 为 G1 带来了退化 GC 主动检测机制。核心逻辑是:

在 GC 周期中引入一个"摆烂阈值"——如果连续 N 次 GC 活动量低于某个比例(比如回收内存不到预期的 5%),G1 就判定自己正在"无效循环",主动触发提前退化(Early Degeneration),跳过剩余的混合回收步骤,直接将控制权归还用户线程。

这意味着什么?

场景升级前升级后
堆接近上限持续低效 GC,延迟爆炸快速识别,主动退化,延迟可控
混合 GC 永远跑不完用户线程被长时间停顿提前退出,最小化停顿
内存分配速率过高被动等 OOME主动预警,拒绝无效劳动

1.3 如何配置

# 启用摆烂检测(默认开启)-XX:+G1DetectDegenerateGC# 连续 N 次低效 GC 后触发退化(默认 6)-XX:G1DegenerateGCThreshold=6# 触发退化的最低活动量阈值(默认 5%)-XX:G1DegenerateGCActivityThreshold=0.05

注意G1DetectDegenerateGC在 JDK 25 默认为true。如果你在生产环境使用 G1,建议升级后观察一段时间,确认行为符合预期。


二、27 个 Bug 修复

本次版本共修复 27 个 Bug,涵盖:

  • GC 类:G1 并行标记偶发数据竞争、ZGC 大页内存泄漏(已在 JDK 21/24 部分修复的基础上补全)
  • HotSpot 编译器:C2 编译器关于 SIMD 指令重排的优化问题,Shenandoah GC 在 NUMA 架构下的内存绑定错误
  • 类库java.lang.invokeMethodHandle 组合调用在特定场景下的类型推断错误
  • 工具链jlink在模块路径包含重复 Artifact 时输出乱码

三、4 项新特性

3.1 G1 GC 退化检测(核心新特性)

如上所述,这是本次最受关注的新特性,让 G1 在极端压力下不再死撑。

3.2 Vector API 进入第七轮孵化

JEP 478(Preview)和 JEP 484 引入的 Vector API 继续演进,JDK 25 带来第七轮孵化版本,在 JDK 24 基础上:

  • 新增VectorMask与标量操作的更紧密集成
  • 优化了对 ARM SVE2 架构的支持
  • 修正了若干在复杂循环中向量化的边界条件
importjdk.incubator.vector.*;importjava.Arrays;publicclassVectorDemo{publicstaticvoidmain(String[]args){varSPECIES=FloatVector.SPECIES_256;float[]a=newfloat[1024];float[]b=newfloat[1024];float[]c=newfloat[1024];Arrays.fill(a,1.0f);Arrays.fill(b,2.0f);for(inti=0;i<a.length;i+=SPECIES.length()){varva=FloatVector.fromArray(SPECIES,a,i);varvb=FloatVector.fromArray(SPECIES,b,i);varvc=va.mul(vb);// 向量化乘法vc.intoArray(c,i);}System.out.println("向量计算完成: "+c[0]);}}

3.3 安全的类文件采样加载

新增ClassFileSamplingAPI,允许在运行时按策略采样加载类文件,用于 Profiling 工具在不停机的情况下获取类的结构信息,而不必完整解析整个 JAR 包。这对大型微服务应用的诊断工具意义重大。

3.4 JMX 通知过滤增强

javax.management.NotificationFilter新增getEnabledClasses()方法,允许管理平台动态查询当前已启用的通知类白名单,进一步提升监控系统的可控性。


四、升级建议

环境建议
使用 G1 GC 的生产服务强烈建议升级,退化检测可显著改善极端场景下的延迟
仅使用 ZGC / Shenandoah可以先观察,G1 的变化不影响
JDK 21 LTS 用户继续留在 21,25 是非 LTS
使用 Vector API 的项目升级并测试第七轮孵化 API 变更

五、总结

JDK 25.0.3 是一个"小步快跑"的季度更新,但 G1 GC 的退化检测机制是一个实用的改进,解决的是生产环境中真实存在的痛点。如果你正在使用 G1,强烈建议在测试环境验证后升级——那句"摆烂检测"可不是调侃,它真的能让 GC 在关键时刻优雅退场。


参考资料

  • JEP 478: Key Derivation Method APIs(JDK 25 相关特性)
  • JDK 25 Release Notes
  • OpenJDK jdk25 仓库

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询