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