You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于并行GC触发OutOfMemoryError时“总时间”含义的技术问询

并行垃圾收集器中“总时间”的具体定义

针对你提到的并行GC抛出OutOfMemoryError的触发条件,这里的总时间其实很好理解:它指的是从你的Java应用启动开始,到触发这个错误前的全部运行时长——这个时长包含了两部分:应用业务代码的执行时间,加上所有垃圾回收过程消耗的时间总和。

咱们再结合文档里的规则拆解下:

如果垃圾回收(GC)占用时间过长,并行收集器会抛出OutOfMemoryError:若超过98%的总时间用于垃圾回收,且回收的堆内存不足2%,则抛出OutOfMemoryError。

并行收集器会在运行过程中持续统计两个核心指标:

  • 所有GC阶段累计消耗的时间,占应用总运行时间的比例
  • 每次GC完成后,实际释放的堆内存占当前堆总容量的比例

当这两个条件同时触发时,收集器会判定:当前应用已经陷入了“无效GC循环”——几乎所有时间都花在回收内存上,但每次只能回收极少量空间,说明堆内存已经严重不足,继续GC也没法给业务代码腾出可用空间,反而会浪费CPU资源,所以直接抛出OutOfMemoryError来终止程序,避免无意义的资源消耗。

举个直观的例子:假设你的应用启动后总共跑了100秒,其中99秒都在执行GC操作,而且每次GC只能回收不到当前堆2%的内存,这时候就会触发这个错误。

内容的提问来源于stack exchange,提问作者njk2015

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:31:22