内存泄漏

内存泄漏——如何查看

——如果有个梦想,就要捍卫它

首先需要知道三个词:GC(垃圾收集器)、内存溢出、内存泄漏。

内存溢出与内存泄漏

内存溢出(out of memory)

内存溢出是指当对象的内存占用已经超出分配内存的空间大小,这时未经处理的异常就会抛出。比如常见的内存溢出情况有:bitmap过大;引用没释放;资源对象没关闭
简单而言,内存溢出就是要求分配的内存超出了系统能给的,系统不能满足需求,于是产生溢出。
如图,这是常见的bitma对象的溢出,显示像素过高或图片尺寸远远大于显示空间的尺寸时,通常都要将其缩放,减小占用内存。

内存泄漏(memory leak)

1.由于我们程序的失误,长期保持某些资源(如Context)的引用,垃圾回收器就无法回收它,当然该对象占用的内存就无法被使用,这就造成内存泄露。
2.保存了多个耗用内存过大的对象(如Bitmap)或加载单个超大的图片,造成内存超出限制。

重点:如何查看内存泄漏

第一步:

在Android Studio有个Android Monitor,点击Android Monitor后—–>Monitors

第二步

强制GC:点击 Initate GC 按钮,建议点击后等待几秒后再次点击,多点几次,让GC更加充分。然后点击 Dump Java Heap 按钮,然后等到一段时间,生成有点慢。


会生成的Java Heap文件(.hprof)

第三步

点击 Analyzer TasksPerform Analysis 按钮,然后,即可找出内存泄漏

Analysis Results 即可查看Leaked情况

可以看到我写的工具类ToastUtil有内存泄漏,对象是mInstance

深入查看

第四步

转换成标准的hprof文件
前几步生成的文件在Android Studio的哪里呢?
在Android Studio的左侧 Captures —–> Heap Snapshot文件夹里面

保存hprof文件,

选择路径,填写文件名:

第五步

使用MAT工具查看
MAT工具地址:
http://www.eclipse.org/mat/downloads.php

感谢以下各位大神写的文章:
(1)如何查看内存泄露:
1. http://www.cnblogs.com/taoweiji/p/5760537.html
2. http://blog.csdn.net/qq_27650777/article/details/51984006
3. https://www.2cto.com/kf/201512/455421.html
(2)Shallow Size、Retained Size、Heap Size的讲解:
3. http://blog.csdn.net/yincheng886337/article/details/50517375
4. http://blog.csdn.net/kingzone_2008/article/details/9083327
5. https://segmentfault.com/q/1010000008704481/a-1020000008707290
内存溢出与内存泄漏的讲解:
6. http://blog.csdn.net/sinat_29255093/article/details/52556760
7. http://www.importnew.com/12961.html

以下是我写的关于本文章的小项目:
https://github.com/Jys05/MemoryLeak_Test

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值