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 都成立(這個數值是無法調整的)。<