[java]java.lang.OutOfMemoryError总解

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java.lang.OutOfMemoryErrorJava中一种常见的错误,表示Java虚拟机的内存不足以支持应用程序的运行。它有几种常见的形式,包括Java heap space、PermGen space和GC overhead limit exceeded。 当出现Java heap space错误时,表示Java堆内存不足。解决这个问题的方法是增加Java堆的大小,可以通过调整-Xms和-Xmx参数来实现。另外,还可以检查代码中是否存在内存泄漏或者过度使用内存的情况。 而当出现PermGen space错误时,表示永久代内存不足。永久代主要用于存放类的元数据信息,如果类的数量过多或者类的大小超过了永久代的限制,就会导致PermGen space错误。解决这个问题可以增加永久代的大小,可以通过调整-XX:PermSize和-XX:MaxPermSize参数来实现。 另外一种形式的OutOfMemoryError是GC overhead limit exceeded错误。这个错误表示垃圾回收占用了过多的时间,但是却没有回收足够的内存。这意味着应用程序可能在不断进行垃圾回收,但是却无法释放足够的内存,导致内存不足。解决这个问题的方法是增加堆的大小,可以通过调整-Xmx参数来实现。另外,还可以检查代码中是否存在死循环或者过度创建对象的情况,这些情况可能导致垃圾回收无法正常工作。 综上所述,java.lang.OutOfMemoryErrorJava中常见的内存不足错误,可以通过增加堆的大小或者调整相关参数来解决。此外,还需要检查代码中是否存在内存泄漏、过度使用内存或者垃圾回收无法正常工作的情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值