美文网首页
内存分析工具使用-----实践篇

内存分析工具使用-----实践篇

作者: 普通的程序员 | 来源:发表于2018-03-20 00:19 被阅读0次

先制造一个内存泄露。
内存泄漏的几个方式

1.webview
2.单例持有activity的context;
3.handler持有activity的context(本质是匿名内部类默认持有外部引用,类似的有Thread、TimerTask)
4.非静态内部类持有某callback(本质是非静态内部类默认持有外部引用)
5.持有静态的View引用
6.资源使用完成后没有关闭,例如:BraodcastReceiver,ContentObserver,File,Cursor,Stream,Bitmap
7.集合类内存泄漏,如果一个集合类是静态的(缓存HashMap),只有添加方法,没有对应的删除方法,会导致引用无法被释放,引发内存泄漏。
8.错误的覆写了finalize()方法,finalize()方法执行执行不确定,可能会导致引用无法被释放。

经典存泄露代码

http://blog.csdn.net/qq_17250009/article/details/51261616

demo用不正确的方法使用handler

image

正常的使用,从MainActivity进入SecondActivity日志如下。

5秒后接到msg

image

如果进入SecondActivity并在5秒内按下返回键,日志如下。

image

操作步骤

1:反复操作:

MainActivity进入SecondActivity,迅速返回MainActivity再进入Second;

2:Dump Heap;

3:用MAT打开hprof,在支配树里输入demo的包名com.example.lahm进行过滤;

image

有意思的是看图中第二个SecondActivity还跟了一个MyHandler。

4:对这个Second右键

image

5:对列举出来的引用,选择任一右键

image

6:结果显示

image

另一种查看方法

I.MAT上方选择OQL;

image

II.选一个 Path To GC Roots /exclude weak references

image

概念参考

http://www.jianshu.com/p/d8e247b1e7b2#

webview内存泄漏从cpp上找到原因,但没分析
https://my.oschina.net/zhibuji/blog/100580

http://blog.csdn.net/xygy8860/article/details/53334476?utm_source=itdadao&utm_medium=referral

相关文章

网友评论

      本文标题:内存分析工具使用-----实践篇

      本文链接:https://www.haomeiwen.com/subject/pcnmqftx.html