内存泄漏和内存溢出的区别

内存溢出是指向JVM申请内存空间时没有足够的可用内存了,就会抛出OOM即内存溢出。内存泄漏是指,向JVM申请了一块内存空间,使用完后没有释放,由于没有释放,这块内存区域其他类加载的时候无法申请,同时当前类又没有这块内存空间的内存地址了也无法使用,相当于丢了一块内存,这就是内存泄漏,值得注意的是内存泄漏最终会导致内存溢出,很好理解,内存丢了很多最后当然内存不够用了。C++比较容易内存泄漏,因为C++编程中每申请一块内存空间后要手动delete掉,而JAVA有垃圾回收机制,大部分情况下不用手动去释放内存,所以JAVA出现内存泄漏的情况比较少,一般JAVA出现内存泄漏都是因为阻碍了GC而造成的。

总结一下JAVA比较容易出现内存泄漏的几种情况:

1.非静态内部类的静态实例

非静态内部类可能会有外围类的引用,如果它的实例是静态的,即加载该外围类的时候就会去实例化这个非静态内部类,那么这个外围类会一直被引用,GC永远不会去回收它,这个是最危险的。

2.数据库连接,IO连接,socket连接等未关闭,会一直占用内存,如果这些连接没有复用的话就造成了内存泄漏。

有一个误区,内存泄漏不是所谓的内存浪费,内存浪费意思是该内存空间虽然不用,但是需要用的时候还可以找到其内存地址。而内存泄漏是指占着内存空间却找不到内存地址了。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值