java.lang.OutOfMemoryError: GC overhead limit exceeded

错误代码:

java.lang.OutOfMemoryError: GC overhead limit exceeded

原因分析:

该错误为JDK6新增错误类型。当GC为释放很小空间占用大量时间时抛出。
一般是因为堆太小,导致异常的原因:没有足够的内存

解决办法:

首先查看系统是否有使用大内存的代码或死循环,然后可以通过调整如下参数来解决:

  1. JVM opts 中增加heap值,如: -Xmx2048m 或者更大(注意32位、64位版本)
  2. JVM的启动参数中限制使用该参数(默认启用):-XX:-UseGCOverheadLimit

JVM初始分配的堆内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的堆内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;
 空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx 相等以避免在每次GC 后调整堆的大小。
 说明:如果-Xmx 不指定或者指定偏小,应用可能会导致java.lang.OutOfMemory错误,此错误来自JVM,不是Throwable的,无法用try...catch捕捉。

posted on 2013-11-22 15:23  勇敢拼搏  阅读(466)  评论(0)    收藏  举报

导航