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。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。