java.lang.OutOfMemory 小结

 

1、场景: 在Linux 部署生产系统环境时,在启动运行 搭建好的tomcat时,报错如下

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 增加下面的一行:
JAVA_OPTS=" -XX:PermSize=64M -XX:MaxPermSize=128m"


    2. 如果tomcat部署了多个应用,并且这些应用都使用了相同的jar,可以将共同的jar移到tomcat的lib下,减少类的重复加载

 

2、在 IDE环境中,时不时 报出 OutOfMemoryError:  Java heap space 堆栈溢出

 解决这类问题有两种思路:
   1. 减少不必要地对象的创建,尽可能不要在循环中重复创建对象。
   2. 增加Java虚拟机中Xms(初始堆大小)和Xmx(最大堆大小)参数的大小。如:set JAVA_OPTS= -Xms256m -Xmx1024m

 

3、OutOfMemoryError:unable to create new native thread

 

这种情况在Java线程个数很多的情况下容易发生

 

如何监视jvm内存?

使用jvisualvm

 

发布了148 篇原创文章 · 获赞 10 · 访问量 20万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章