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

内存泄漏:是泄漏的对象通过了一定得路径与GC Roots产生了关联,导致垃圾收集器无法回收这些对象。(HotSpot VM是通过可达性分析的方法来判断对象是否属于垃圾回收对象,以GC Roots为起点,不管通过什么样的路径,只要可到达的对象都认为不是垃圾对象)

内存溢出:内存中的对象确实都还必须活着,但是内存空间不足导致的,当然不是说所有的内存溢出都是硬件上内存不够的问题,

很多场景是由于不当的代码导致的,比如死循环里一直在创建对象,并且把创建的对象放入了list中(因为list一直在引用这些对象,导致GC回收不了,又由于是死循环,所以肯定会导致内存溢出的)

个人认为内存泄漏和内存泄漏重点的确认内存中的对象是否是必须活着的

如果都必须活着,导致的内存不够用那就是内存溢出

如果是通过其他你想不到的路径与GC Roots产生了关联,导致垃圾收集器无法回收这些对象的话(也就是说正常情况下你是期望这些对象不可达的,是应该被回收的,但是它却可达了,没被回收)这种情况属于内存泄漏

“如果是内存泄漏,可进一步通过工具查看泄漏对象到GC Roots的引用链。于是就能找到泄漏对象是通过怎样的路径与GC Roots相关联并导致垃圾收集器无法回收它们的。掌握了泄漏对象的类型信息及GC Roots引用链的信息,就可以比较准确地定位出泄漏代码的位置”

上述加黑字体摘抄自《深入理解Java虚拟机》

以上仅仅是个人观点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曹举的个人博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值