内存溢出和内存泄漏

内存溢出(out of memory)

        是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;

        比如堆内存是4G,程序中有大量的存活对象,即使是经过full GC(如果不明白,可以忽略)之后,仍然还有3.5G的存活对象,这时候再在执行的方法里面搞了一个1G大小的存活对象,导致堆空间无可用空间给程序使用,导致的程序崩溃现象。

        内存溢出有2个主要原因:

                (1)堆空间设置不合理,堆空间很小。

                (2)代码中创建了大量对象,且长时间不能被垃圾收集器回收,然后又继续创建大对象。

内存泄露(memory leak)

        是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。

        内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。比较常见的场景是io流的close关闭的资源,我们不去close,导致系统垃圾回收器无法回收资源,单例模式引用的一些对象,这些被引用的对象是无法被回收的;数据库连接,网络socket连接不关闭等等情景。

        内存泄漏意味着堆的可用空间变少,增加了内存溢出的可能性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值