为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

错误java.lang.OutOfMemoryError:超过GC开销限制在执行JUnit测试时,我会收到以下错误消息:java.lang.OutOfMemoryError: GC overhead limit exceeded我知道OutOfMemoryError是的,但是GC开销限制意味着什么?我怎么解决这个问题?
查看完整描述

4 回答

?
森林海

TA贡献2011条经验 获得超2个赞

此消息意味着,由于某种原因,垃圾收集器占用了过多的时间(默认为进程所有CPU时间的98%),每次运行时恢复的内存非常少(默认为堆的2%)。

这实际上意味着您的程序停止执行任何进度,并且一直忙于只运行垃圾收集。

为了防止应用程序占用CPU时间而不做任何事情,JVM抛出以下内容Error所以你有机会诊断这个问题。

我看到这种情况的罕见情况是,一些代码在已经非常受内存限制的环境中创建了大量临时对象和大量弱引用对象。

检查这篇文章详情(特别是本部分).


查看完整回答
反对 回复 2019-05-30
?
长风秋雁

TA贡献1757条经验 获得超7个赞

如果你确定没有内存泄漏在您的程序中,尝试:

  1. 增加堆大小,例如

    -Xmx1g.

  2. 启用并发低暂停收集器

    -XX:+UseConcMarkSweepGC.

  3. 尽可能重用现有对象以节省一些内存。

如有需要,极限检查可以通过添加选项禁用-XX:-UseGCOverheadLimit到命令行。


查看完整回答
反对 回复 2019-05-30
  • 4 回答
  • 0 关注
  • 13254 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信