内存溢出和内存泄漏

内存溢出

内存不够用

典型的内存溢出就是Out Of Memory(OOM)

  • 由于GC不断发展,所以一般情况下不会发生OOM,除非应用程序占用的内存增长速度非常快,造成垃圾回收的速度已经跟不上内存消耗的速度
  • 官方对于OOM的解释就是没有空闲的内存,并且垃圾回收器也无法提供更多内存

内存溢出原因

堆内存不够一般有两个原因
1. jvm设置的堆的大小不够 : 可通过Xmx,Xms来设置
2. 代码中创建了大量大对象,并且很长时间不能被回收

内存泄漏

内存开始够用,但浪费很多,之后不够用

严格来说,只有对象不会再被程序用到了,但是GC又不能回收他们的情况,才叫内存泄漏

但是: 一般我们说的内存泄漏都是广义的,就是指有一些用不到的对象占用着虚拟机的内存,一般是指由于自己写代码的时候的一些疏忽,导致一些该回收的对象没有被回收

内存泄漏场景

  1. 单例模式

    单例对象的内部依赖了一个外部的对象,这个外部的对象在一段时间后不被使用了,因此造成很大的浪费,尤其是遇到这个外部的对象非常大的情况

  2. 一些对象没有进行close()操作

    比如数据库连接开了连接后并没有断开,Socket的连接开了没有断开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值