我执行JUnit测试时收到以下错误消息:
java.lang.OutOfMemoryError: GC overhead limit exceeded
我知道是什么OutOfMemoryError,但是GC开销限制是什么意思?我该如何解决?
该消息表示由于某种原因,垃圾收集器占用了过多的时间(默认情况下为该进程所有CPU时间的98%),并且每次运行时恢复的内存很少(默认为堆的2%)。
这实际上意味着你的程序停止任何进展,并且一直在忙于仅运行垃圾回收。
为了防止你的应用程序浪费CPU时间而不做任何事情,JVM抛出此错误,Error以便你有机会诊断问题。
我见过这种情况的罕见情况是,某些代码在一个已经非常受内存限制的环境中创建了大量的临时对象和大量的弱引用对象。