1

在此处输入图像描述我正在使用 Eclipse 的 MAT 来分析我的 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 打开与其相关的源文件。

请帮忙。

谢谢斯内哈
_

4

2 回答 2

2

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

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

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

右键单击您的类名 -> 选择 GC 根路径 -> 排除弱引用。

希望这可以帮助。

于 2012-05-18T09:22:49.000 回答
0

观看Google I/O 2011:Android 应用程序的内存管理。最常见的内存泄漏源、MAT 的使用和实际示例都在此处进行了介绍。

此外,Android 应用程序的内存分析描述了如何使用 MAT,并提供了指向其他有用材料的链接。

最后,调查您的 RAM 使用情况,介绍如何(通常)触发内存泄漏(如果有)。

于 2014-10-14T21:09:33.040 回答