MAT 不是一个万能工具,它并不能处理全部类型的堆存储文件。java
首先,启动安装配置好的 Memory Analyzer tool , 而后选择菜单项 File- Open Heap Dump(eclipse会自动载入)来加载须要分析的堆转储文件。android
文件加载完成后,你能够看到以下图所示的界面浏览器
经过上面的概览,咱们对内存占用状况有了一个整体的了解。多线程
另外,MAT 工具提供了一个很贴心的功能,将报告的内容压缩打包到一个 zip 文件,并把它存放到原始堆转储文件的存放目录下,这样若是您须要和同事一块儿分析这个内存问题的话,只须要把这个小小的 zip 包发给他就能够了,不须要把整个堆文件发给他。而且整个报告是一个 HTML 格式的文件,用浏览器就能够轻松打开。eclipse
接下来咱们就能够来看看生成的报告都包括什么内容,能不能帮咱们找到问题所在吧。您能够点击工具栏上的 Leak Suspects 菜单项来生成内存泄露分析报告,也能够直接点击饼图下方的 Reports->Leak Suspects 连接来生成报告。工具
一般咱们都会采用下面的“三步曲”来分析内存泄露问题:优化
下面将用一个基本的例子来展现如何采用“三步曲”来查看生产的分析报告。spa
如今,让咱们开始真正的寻找内存泄露之旅,点击“Details ”连接,能够看到以下图所示对可疑对象的详细分析报告。线程
咱们能够很清楚的看到整个引用链,内存汇集点是一个拥有大量对象的集合,若是你对代码比较熟悉的话,相信这些信息应该能给你提供一些找到内存泄露的思路了。对象
接下来,咱们再继续看看,这个对象集合里到底存放了什么,为何会消耗掉如此多的内存。
在这张图上,咱们能够清楚的看到,这个对象集合中保存了大量图片对象的引用,可能就是它致使的内存泄露等问题。
再仔细看......
实际上这些位图真正占用的内存只有一丁点,可是java虚拟机为其保留了70%的内存备用,这些内存没有被回收,因此利用率几乎为 0 !
今后处你们均可以知道了,应用里面图片多了实际上是一件悲剧的事,至少可能会给应用带来许多不可预知的问题,并且在图片方面的内存优化是比较麻烦的,哎,最近搞内存泄露,涉及到动态库,JNI,多线程,资源同步与竞争等,蛋疼的事 ......
有些图片为Android预加载部分的,具体可参看下面网址:http://stackoverflow.com/questions/9653457/locating-and-remedying-cause-of-large-heap-size
@成鹏致远
(blogs:lcw.cnblogs.com)
(email:wwwlllll@126.com)
(qq:552158509)