![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLx0EROp3Z61EeJpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLxczM0MzNwMjM4EzMwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
1.概述
JVM 抛出 OutOfMemoryError 的最后一种情况是 JVM 认为在执行 GC 上花费了太多时间:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
当满足下列所有条件时就会抛出该错误。
- 花在 Full GC 上的时间超出了
标志指定的值。其默认值是-XX:GCTimeLimit=N
(也就是,如果 98% 的时间花在了 GC 上,则该条件满足)。98
- 一次 Full GC 回收的内存量少于
标志指定的值。其默认值是 2,这意味着如果 Full GC 期间释放的内存不足堆的 2%,则该条件满足。-XX:GCHeapFreeLimit=N
- 上面两个条件连续 5 次 Full GC 都成立(这个数值是无法调整的)。<