java.lang.OutOfMemoryError:GC overhead limit exceeded
Java运行时环境(JRE
)包含一个内置的垃圾回收进程,而在许多其他的编程语言中,开发者需要手动分配和释放内存。
Java应用程序只需要开发者分配内存,每当在内存中特定的空间不再使用时,一个单独的垃圾收集进程会清空这些内存空间。
默认情况下,当应用程序花费超过98%的时间用来做GC并且回收了不到2%的堆内存时,会抛出java.lang.OutOfMemoryError:GC overhead limit exceeded
错误。具体的表现就是你的应用几乎耗尽所有可用内存,并且GC多次均未能清理干净。
如果没有这个异常,GC进程将被重启,100%的CPU将用于GC,而没有CPU资源用于其他正常的工作。
所以java.lang.OutOfMemoryError:GC overhead limit exceeded
也可以看做是一个fail-fast(快速失败)
实战的实例