2010-06-24 62 views
46

我需要检查我的应用程序的内存泄漏,我还需要看到我的应用程序的内存分配。 我下载并安装了eclipse内存分析器,它看起来像第一步是打开一个堆转储。 但是什么是堆转储,我如何创建堆转储。 而我要去究竟如何使用这个软件,我做了一些谷歌搜索,但我找不到任何有用的信息 感谢Android ==>内存分析==> Eclipse内存分析器?

+3

仅供参考,因为它涉及到的话题 - 有一个关于内存分析的Android博客上的新博客文章:http://android-developers.blogspot.com/2011/03/memory-analysis-for-android.html – 2011-03-25 03:36:31

回答

40

当您调试应用程序,在Eclipse开放DDMS。在工具栏上有一个堆转储按钮,您可以使用它来生成堆转储以在Eclipse内存分析器中查看。这只支持我认为1.6+或2.0+ SDK。

+0

好吧,所以我点击转储,并打开了一个新的名为android123123123的窗口中有很多奇怪的字符。 我该如何处理这个页面? 档案在哪里? 再次感谢 – aryaxt 2010-06-24 18:48:59

+2

我想出了自己。 文件==>另存为,然后在内存分析器中打开文件 – aryaxt 2010-06-24 18:58:19

+6

您省略了Mathias答案中提到的一个关键步骤:“使用hprof-conv.exe转换器将dalvik VM的堆转储转换为常规hprof格式工具在Android SDK的工具目录中。“ – 2012-07-24 16:55:54

10

需要使用Android SDK工具目录中的hprof-conv.exe转换工具将dalvik VM的堆转储转换为常规hprof格式。 您可以打开这个HPROF与Eclipse MAT或其他工具有: YourKit http://www.yourkit.com/ 还有JProbe http://www.quest.com/jprobe/

除了DDMS你可以从你的应用程序/代码(仅适用于新的软件开发工具包),通过Debug.dumpHprofData(...)

还要注意创造HPROF在DDMS中你可以看到你的应用程序正在使用的堆。它不显示外部资源(如位图)正在分配的本机堆。尽管如此,在检查内存泄漏时还需要考虑这些资源。当原生应用堆和应用堆合计达到16MB/resp时。 24MB你会得到一个OOM错误。

您可以通过Debug.getNativHeapAllocatedSize()查看已使用的本地堆(即通过位图在您的应用中)。

+0

我在Mac上没有像exe文件那样的刺激,我不必对文件做任何事情,我只是保存它,因为它是从日食,我用记忆分析器打开它,没有问题 – aryaxt 2010-06-24 23:06:08

+1

@MathiasLin,有没有什么办法来分析/查看本地堆中的对象? – snapfractalpop 2012-04-04 03:02:32

+0

@snapfractalpop对不起,我不知道,还没有找过我自己。 – 2012-04-04 09:50:09

3

另见http://developer.android.com/guide/developing/debugging/ddms.html#profiling

如果有帮助,您可以通过使用调试API允许通过的代码局部区域分析。以这种方式,分析traceview中的痕迹时就不那么冗长了。例子见http://macgyverdev.blogspot.com/2011/07/profiling-android-application-tutorial.html

,并就如何转换DDMS堆转储,因此您可以在Eclipse内存分析器进行查看,并通过支配树的工具找到你的泄漏对象的一些更详细的信息:http://macgyverdev.blogspot.com/2011/11/android-track-down-memory-leaks.html