`

[java]java.lang.OutOfMemoryError总解

    博客分类:
  • JAVA
阅读更多

1).java.lang.OutOfMemoryError: PermGen space
            PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space
            从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。
            设置:-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
            因为项目中引用了很多的jar包,而这些jar包中的class信息会被Web服务器的class loader加载到 PermGen space 区域,在 JVM 默认的情况下,该部分空间的大小只有 4M,在jar包非常多的情况下,显然是不够用的,所以通过 -XX:MaxPermSize=256m 指定最大值后即可解决问题。
           建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。

2).java.lang.OutOfMemoryError: Java heap space
           JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置。JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。
提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。
提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。

附:设置JVM内存,请搜索详细查看Java虚拟机的选项。
例:tomcat手动设置MaxPermSize等大小。
           可在catalina.bat文件的“rem Guess CATALINA_HOME if not defined”这行上面加入以下行:
set JAVA_OPTS=-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m

 

转载自:http://hi.baidu.com/xiaolangs/blog/item/c99dcac2542e25190ef47758.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics