我正在使用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打开与其相关的源文件。
请帮忙。
感谢
斯纳
答案 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介绍了如何(如果有)触发内存泄漏的方法。