jvm内存溢出

内存溢出和内存泄漏区别

内存溢出

Out Of Memory
是指程序在申请内存时,没有足够的内存空间供其使用,出现Out Of Memory

内存泄漏

Memory Leak
是指程序在申请内存后,由于某种原因无法释放已申请的内存空间,导致这块内存无法再次被利用,造成系统内存的浪费
memory leak会最终会导致out of memory。

内存溢出分类

栈内存溢出(StackOverflowError)

程序所要求的栈深度过大导致,可以写一个死递归程序触发。

如何解决

一般是程序问题,最大可能是递归程序有问题,如果确认程序没问题,就改变-Xss 标识来增加线程栈的大小

堆内存溢出(OutOfMemoryError : java heap space)

(1)如果是内存溢出,则通过 调大 -Xms,-Xmx参数。
(2)如果是内存泄露,则看对象如何被 GC Root 引用。

如何解决
持久代内存溢出(OutOfMemoryError: PermGen space)

持久代中包含方法区,方法区包含常量池。
因此持久代溢出有可能是(1) 运行时常量池溢出,也有可能是(2)方法区中保存的Class对象没有被及时回收掉或者Class信息占用的内存超过了我们配置。
用String.intern()触发常量池溢出。
Class对象未被释放,Class对象占用信息过多,有过多的Class对象。可以导致持久代内存溢出。

无法创建本地线程

Caused by: java.lang.OutOfMemoryError:unable to create new native thread
系统内存的总容量不变,堆内存、非堆内存设置过大,会导致能给线程分配的内存不足。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值