2

GC overhead limit exceeded

java.lang.OutOfMemoryError:GC overhead limit exceeded

是虚拟机判定的GC效率过低抛出的error,这个仅仅是起到辅助作用,帮助提示系统分配的堆可能太小,虚拟机不一定要开启这个错误提示,可以通过“-XX:-UseGCOverheadLimit”来禁止这种OOM的产生。

判定GC效率过低的条件

GC是内存回收的关键,如果GC效率低下,那么系统的性能会受到严重的影响。如果系统的堆空间太小,那么GC所占的时间就会较多,并且回收所释放的内存就会较少。根据GC占用的系统时间,以及释放内存的大小,虚拟机会评估GC的效率,一旦虚拟机认为GC的效率过低,就有可能直接抛出OOM异常。

虚拟机判定的GC效率过低的情况如下:
(1)花在GC上的时间是否超过了98%
(2)年老代释放的内存是否小于2%
(3)eden区释放的内存是否小于2%
(4)是否连续最近5次GC都出现了上述几种情况(同时出现)

只有同时满足上面条件,虚拟机才可能抛出OOM。

参考


codecraft
11.9k 声望2k 粉丝

当一个代码的工匠回首往事时,不因虚度年华而悔恨,也不因碌碌无为而羞愧,这样,当他老的时候,可以很自豪告诉世人,我曾经将代码注入生命去打造互联网的浪潮之巅,那是个很疯狂的时代,我在一波波的浪潮上留下...


« 上一篇
Java线程与Xss
下一篇 »
jvm参数备忘