错误java.lang.OutOfMemoryError:超过GC开销限制

错误java.lang.OutOfMemoryError:超过GC开销限制

在执行JUnit测试时,我会收到以下错误消息:

java.lang.OutOfMemoryError: GC overhead limit exceeded

我知道OutOfMemoryError是的,但是GC开销限制意味着什么?我怎么解决这个问题?


大话西游666
浏览 13268回答 4
4回答

森林海

此消息意味着,由于某种原因,垃圾收集器占用了过多的时间(默认为进程所有CPU时间的98%),每次运行时恢复的内存非常少(默认为堆的2%)。这实际上意味着您的程序停止执行任何进度,并且一直忙于只运行垃圾收集。为了防止应用程序占用CPU时间而不做任何事情,JVM抛出以下内容Error所以你有机会诊断这个问题。我看到这种情况的罕见情况是,一些代码在已经非常受内存限制的环境中创建了大量临时对象和大量弱引用对象。检查这篇文章详情(特别是本部分).

长风秋雁

如果你确定没有内存泄漏在您的程序中,尝试:增加堆大小,例如-Xmx1g.启用并发低暂停收集器-XX:+UseConcMarkSweepGC.尽可能重用现有对象以节省一些内存。如有需要,极限检查可以通过添加选项禁用-XX:-UseGCOverheadLimit到命令行。
打开App,查看更多内容
随时随地看视频慕课网APP