加入收藏 | 设为首页 | 会员中心 | 我要投稿 三明站长网 (https://www.0598zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 评论 > 正文

什么是内存泄漏?该如何检测?

发布时间:2021-04-01 11:32:41 所属栏目:评论 来源:互联网
导读:就是一部分内存空间我明明已经使用了,却没有引用指向这部分空间。造成这片已经使用的空间无法处理的情况。 正规点的理解:动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。 2、内存泄漏的危害 长时间运行,程序变卡,性能

就是一部分内存空间我明明已经使用了,却没有引用指向这部分空间。造成这片已经使用的空间无法处理的情况。

正规点的理解:动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。

2、内存泄漏的危害

  • 长时间运行,程序变卡,性能严重下降
  • 程序莫名其妙挂掉
  • OutOfMemoryError错误
  • 乱七八糟的错误,还不易排查

反正内存泄漏不是好事。

二、内存泄漏原因

内存泄漏原因太多了。说不定就是某一行代码不对就会出现这种情况,因此这里给出最常见的几种。关键的还是如何找出哪个地方出现了内存泄漏,代码好修改,错误不易查。

1、大量使用静态变量

静态变量的生命周期与程序一致。因此常驻内存。
存从150M一下子飙升到225M,可见飙升的厉害。输出为false,说明user对象被重复添加了。我们知道像HashMap在添加新的对象时,会对其hashcode进行比较,如果一样,那就不插入。如果一样那就插入。图可以看到上升幅度没那么大。而且输出为true,这是肯定的,由于重写了hashcode和equal,所以HashMap添加的肯定是同一个对象。

4、内部类持有外部类

这个场景和上面类似。

5、finalize方法

这个方法之前曾经专门花过文章写过,这个问题很简单。看一张图

(编辑:三明站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读