Android ==> 内存分析 ==> Eclipse 内存分析器?

Posted

技术标签:

【中文标题】Android ==> 内存分析 ==> Eclipse 内存分析器?【英文标题】:Android ==> Memory Analysing ==> Eclipse memory analyzer? 【发布时间】:2010-06-24 18:04:34 【问题描述】:

我需要检查我的应用程序是否存在内存泄漏,我还需要查看我的应用程序的内存分配情况。 我下载并安装了eclipse内存分析器,看起来第一步是打开一个堆转储。 但是什么是堆转储,我如何创建堆转储。 以及我将如何使用这个软件,我做了一些谷歌搜索,但我找不到任何有用的信息 谢谢

【问题讨论】:

仅供参考,因为它指的是主题 - android 博客上有一篇关于内存分析的新博文:android-developers.blogspot.com/2011/03/… 【参考方案1】:

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

【讨论】:

好的,所以我点击了转储,它打开了一个名为 android123123123 的新窗口,里面有很多奇怪的字符。我该怎么处理这个页面?文件在哪里?再次感谢 我自己想通了。文件 ==> 另存为,然后在内存分析器中打开文件 您省略了 Mathias 回答中提到的关键步骤:“dalvik VM 的堆转储需要使用 Android 工具目录中的 hprof-conv.exe 转换器工具转换为常规 hprof 格式SDK。”【参考方案2】:

dalvik VM 的堆转储需要使用 Android SDK 的 tools 目录中的 hprof-conv.exe 转换器工具转换为常规的 hprof 格式。 您可以使用 Eclipse MAT 或其他工具打开此 hprof: 你的工具包http://www.yourkit.com/ 和JProbe http://www.quest.com/jprobe/

除了 DDMS,您还可以通过 Debug.dumphprofData(...) 从您的应用/代码(仅限较新的 SDK)创建 hprof

请注意,在 DDMS 中,您可以看到您的应用正在使用的堆。它不显示外部资源(例如位图)正在分配的本机堆。尽管如此,在检查内存泄漏时也需要考虑这些资源。当本机和应用程序堆加起来分别为 16MB / 时。 24MB 你会得到一个OOM错误。

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

【讨论】:

我在 mac 上没有 exe 之类的东西,我不需要对文件做任何事情,我只是将它保存为来自 eclipse 的文件,然后用内存分析器,没问题 @MathiasLin,有没有办法分析/查看本机堆中的对象? @snapfractalpop 抱歉,我不知道,我自己还没找过。 @snapfractalpop 你找到分析本机内存中对象的方法了吗? @HarshalKshatriya,对不起,我没有......但如果你知道如何,我很想知道!【参考方案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

【讨论】:

以上是关于Android ==> 内存分析 ==> Eclipse 内存分析器?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Android 设备的CPU核数时钟频率以及内存大小

如何用windbg分析内存泄露

如何检查android中有多少内存跟踪代码

Android 性能优化 之谈谈Java内存区域

Android 性能优化 之谈谈Java内存区域

Android 性能优化 之谈谈Java内存区域