执行JUnit测试时收到以下错误消息:
java.lang.OutOfMemoryError: GC overhead limit exceeded
我知道
OutOfMemoryError
是什么,但是GC开销限制是什么意思?我该如何解决?
最佳答案
此消息表示由于某种原因,垃圾收集器占用了过多的时间(默认情况下为该进程所有CPU时间的98%),并且每次运行时恢复的内存很少(默认为堆的2%)。
这实际上意味着您的程序停止任何进展,并且一直在忙于仅运行垃圾回收。
为了防止您的应用程序浪费CPU时间而不做任何事情,JVM会抛出此Error
,以便您有机会诊断问题。
我见过这种情况的罕见情况是,某些代码在已经非常受内存限制的环境中创建了大量的临时对象和大量的弱引用对象。
查看Java GC调整指南,该指南可用于各种Java版本,并且包含有关此特定问题的部分:
关于java - 错误java.lang.OutOfMemoryError:超出了GC开销限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45836833/