在eclipse中使用MAT并解决内存泄漏问题

时间:2012-05-17 10:11:54

标签: android android-activity memory-leaks eclipse-memory-analyzer

enter image description here我正在使用MAT of eclipse来分析我的Android项目中的内存使用情况。

我用过

try {  
            Debug.dumpHprofData("/mnt/sdcard/myapp.hprof");  
            Log.i("","Calle d dumpHprofData");  
         } catch (IOException e) {  
             // TODO Auto-generated catch block  
             e.printStackTrace();  
          }  

在我的onCreate()..并生成myapp.hprof文件。然后使用“hprof-conv myapp.hprof mat.hprof”

将其转换为mat.hprof

我使用eclipse打开了“mat.hprof”,它显示出巨大的泄漏。

我不仅仅是如何分析和解决这些漏洞。

例如:

 7,321 instances of "java.lang.String", loaded by "<system class loader>" occupy 457,648 (23.06%) bytes.   

Keywords  
java.lang.String  

我无法使用MAT打开与其相关的源文件。

请帮忙。

感谢
斯纳

2 个答案:

答案 0 :(得分:2)

转换hprof文件后...尝试从MAT工具打开文件...文件 - &gt;打开堆转储 - &gt;浏览并选择您的文件。

现在点击直方图视图,然后在顶部输入您的活动名称。您将能够看到浅堆和保留堆。

对象应为1.如果大于1,请检查实时引用。

右键点击您的班级名称 - &gt;选择GC根路径 - &gt;排除弱引用。

希望这会有所帮助。

答案 1 :(得分:0)

观看Google I/O 2011: Memory management for Android Apps。 最常见的内存泄漏源,MAT的实际示例 - 都包含在内。

此外,Memory Analysis for Android Applications描述了如何使用MAT,并且链接到其他有用的材料。

最后,Investigating Your RAM Usage介绍了如何(如果有)触发内存泄漏的方法。