Java引入的垃圾回收机制(GC)很好的解决了一部分内存泄漏问题,但是并不能完全封锁内存泄漏给我们带来的困扰。除了养成良好的编码习惯来避免的一部分常见的内存泄漏之外,良好的内存泄漏检测工具更是能高效快速的为我们测出我们项目中的内存隐患。今天介绍的一款Eclipse时代就常用的内存检测工具——Eclipse Memory Analyzer,结合Android Studio使用。
所需要的工具
1.Android Studio 1.3.2(1.1以上即可)
2.Eclipse MemoryAnalyzer(Eclipse Memory Analyzer安装)
步骤
1.导出hprof文件
在Android Studio中选择自己的项目,切换到"Android"页签,点击右边的"Dump Java Heap"

导出的hprof的文件会保存在项目的captures目录下面

2.使用MAT导入hprof文件
选择Open File 选中你导出的hprof文件


注意:出现如上错误是因为android的虚拟机导出的内存文件hprof文件格式与标准的 java hprof文件格式标准不一样,根本原因两者的虚拟机不一致导致的。这里用SDK自带的转换进行转换之后就能正常打开。
3.hprof文件格式转换

For example:
hprof-conv android.hprof mat.hprof
然后用MAT导入转换过后的mat.hprof文件即可

4.Memory Analyzer
从上图可以看到它的大部分功能。
1. Histogram可以列出内存中的对象,对象的个数以及大小。
2. Dominator Tree可以列出那个线程,以及线程下面的那些对象占用的空间。
3.Top consumers通过图形列出最大的object。
4.Leak Suspects通过MA自动分析泄漏的原因。
参考:Android内存优化之二:MAT使用进阶 - 为程序员服务
用Eclipse Memory Analyzer查找内存泄露 - - ITeye技术网站
一次使用Eclipse Memory Analyzer分析Tomcat内存溢出 - - ITeye技术网站
Android 开发进阶之『清除应用中的内存泄漏』 - 简书


网友评论