我需要检查我的应用程序是否存在内存泄漏,我还需要查看应用程序的内存分配。 我下载并安装了eclipse内存分析器,看起来第一步是打开堆转储。 但什么是堆转储,我如何创建堆转储。 我将如何使用这个软件,我做了一些谷歌搜索,但我找不到任何有用的信息 感谢
答案 0 :(得分:40)
调试应用程序时,在Eclipse中打开DDMS。在工具栏上有一个堆转储按钮,您可以使用它来生成堆转储以在Eclipse内存分析器中查看。我认为只支持1.6+或2.0+ SDK。
答案 1 :(得分:10)
dalvik VM的堆转储需要使用Android SDK工具目录中的hprof-conv.exe转换器工具转换为常规hprof格式。 您可以使用Eclipse MAT或其他工具打开此hprof: YourKit http://www.yourkit.com/ 和JProbe http://www.quest.com/jprobe/
除了DDMS,您还可以通过Debug.dumpHprofData(...)
请注意,在DDMS中,您可以看到应用正在使用的堆。它不显示外部资源(如位图)正在分配的本机堆。然而,在检查内存泄漏时还需要考虑这些资源。本机和应用程序堆都加起来为16MB / resp。 24MB你会收到一个OOM错误。
您可以通过Debug.getNativHeapAllocatedSize()
查看已使用的本机堆(即应用程序中的位图)。
答案 2 :(得分:3)
另见http://developer.android.com/guide/developing/debugging/ddms.html#profiling
如果有帮助,您可以使用Debug API启用对本地代码区域的分析。这样,在分析traceview中的跟踪时,您的详细程度就会降低。有关示例,请参阅http://macgyverdev.blogspot.com/2011/07/profiling-android-application-tutorial.html。
有关如何转换DDMS堆转储的更详细信息,以便您可以在Eclipse Memory Analyzer中查看它们,并通过支配树工具找到泄漏的对象:http://macgyverdev.blogspot.com/2011/11/android-track-down-memory-leaks.html