一、Java Heap 溢出
表现:java.lang.OutOfMemoryError:Java heap spacess
原因:java虚拟机创建的对象太多,在进行垃圾回收之间,虚拟机分配的到堆内存空间已经用满了,与Heap space有关
处理方法:
1、检查程序,看是否有死循环或不必要地重复创建大量对象。
2、增加Java虚拟机中Xms(初始堆大小)和Xmx(最大堆大小)参数的大小。如:set JAVA_OPTS= -Xms256m -Xmx1024m
二、运行时常量池溢出和方法区溢出
表现:java.lang.OutOfMemoryError:PermGen space
原因:程序中使用了大量的jar或class,使java虚拟机装载类的空间不够,与Permanent Generation space有关
处理方法:
1、增加java虚拟机中的XX:PermSize和XX:MaxPermSize参数的大小,其中XX:PermSize是初始永久保存区域大小,XX:MaxPermSize是最大永久保存区域大小。如针对tomcat6.0,在catalina.sh 或catalina.bat文件中一系列环境变量名说明结束处(大约在70行左右) 增加一行: JAVA_OPTS=” -XX:PermSize=64M -XX:MaxPermSize=128m” 如果是windows服务器还可以在系统环境变量中设置。
2、清理应用程序中web-inf/lib下的jar,如果tomcat部署了多个应用,很多应用都使用了相同的jar,可以将共同的jar移到tomcat共同的lib下,减少类的重复加载。
三、虚拟机栈和本地方法栈溢出
表现:java.lang.OutOfMemoryError:StackOverflowError
原因:如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常。如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常
处理:注意当栈的大小越大可分配的线程数就越少