46

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

4

3 回答 3

40

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

于 2010-06-24T18:25:24.987 回答
10

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

除了 DDMS,您还可以通过您的应用程序/代码(仅限较新的 SDK)创建 hprofDebug.dumpHprofData(...)

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

您可以通过Debug.getNativHeapAllocatedSize().

于 2010-06-24T19:30:53.127 回答
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

于 2011-07-15T20:10:08.390 回答