产生内存溢出的情况

产生内存溢出的情况

常见的几种情况:

1、内存加载的数据量过大;
2、集合中有死循环或者循环创建大量的对象;
3、集合类中有对对象引用,使用完后未清除,使得JVM 不能回收;
4、第三方的BUG ;
5、启动参数内存值设定过小;

解决方法:

情况一:java.lang.OutOfMemoryError:Javaheapspace
java 堆内存不足。一种是内存太小,内存数据量太多(或者递归调用的层数太多)导致的;另一种是程序中产生了死循环。
如果是java 堆内存不够,通过设置JVM 中的配置:

-Xmx3072m(设置JVM最大内存)
 -Xms3072m(修改初始内存)

情况二:java.lang.OutOfMemoryError:GCoverheadlimitexceeded
JDK6新增的,当GC释放小空间占用大量时间,抛出该异常,一般是由于堆内存过小导致。
1、查看系统是否有大块的内存代码或者死循环,导致没有足够的空间。
2、通过添加JVM配置,来限制使用内存
-XX:-UseGCOverheadLimit

情况三:java.lang.OutOfMemoryError:PermGenspace
JVM P区(年老代)主要是存储class 和Meta 信息,GC在主程序运行期间不会对年老代进行清理,年老代默认是64M。当加载的对象较多的时候会报错。
可修改JVM 配置:

-XX:MaxPermSize=128M 
-XXermSize=128m

情况四:java.lang.OutOfMemoryError:Directbuffermemory
该情况一般调用三方的时候可能会出现
通过调整JVM配置解决:
-XX:MaxDirectMemorySize=128M

情况五:java.lang.OutOfMemoryError:unabletocreatenewnativethread
一般是创建线程的时候栈空间不足,或者是创建线程过多导致的。
JVM并没有直接调整总的栈空间的参数,一般可通过;

1、-Xss减少单个线程的栈大小
2、-Xms-Xmx两个参数减少Head大小,将内存让给栈。

情况六:java.lang.StackOverflowError
线程栈溢出,一般是线程出现调用层次过多(无效递归)或者栈太小导致的。
解决方案:优化代码,减少方法调用层次。
调整-Xss参数增加线程栈大小

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值