内存泄漏检测实战(1)

利用Android Studio的Android Profiler、MAT对Android进行内存泄漏检测

前言

在之前的两篇文章中,Android内存管理&MemoeryLeak&OOM分析Android内存优化技巧,已经覆盖了Android上面的内存管理与优化相关的一些基础知识。
现在简单温习一下用Android Profiler 和 MAT 对 Android进行内存泄漏检测

Android Profiler & Memory Profiler & MAT

Android Profiler是 Android Studio 3.0中引入的,前身是ddms和android monitor,Android Profiler的基本功能在前身中也有体现。Memory Profiler 是 Android Profiler 中的一个组件,可帮助识别导致应用卡顿、冻结甚至崩溃的内存泄漏和流失。 它显示一个应用内存使用量的实时图表,让您可以捕获堆转储、强制执行垃圾回收以及跟踪内存分配。

按以下步骤来打开 Memory Profiler:

  1. 点击 View > Tool Windows > Android Profiler(也可以点击工具栏中的 Android Profiler )。
  2. 从 Android Profiler 工具栏中选择您想要分析的设备和应用进程。 如果您通过 USB 连接了某个设备但该设备未在设备列表中列出,请确保您已启用 USB 调试。
  3. 点击 memory时间线中的任意位置可打开 Memory Profiler。

MAT (Memory Analyzer Tool) 最早是Eclipse的一个插件。The Eclipse Memory Analyzer is a fast and feature-rich Java heap analyzer that helps you find memory leaks and reduce memory consumption(翻译一下,MAT是一个又快,同时功能丰富的java堆分析器,可以帮助查找内存泄漏和减少内存消耗),从https://www.eclipse.org/mat/downloads.php处下载

step1,利用Memory Profiler dump指定应用的内存堆

Picture of Dumping Memory Profiler

step2,重复操作以后,进行GC操作,dump指定应用的内存堆并保存起来

saving heap

step3,convert java heap to mat format

/Users/xxx/Library/Android/sdk/platform-tools/hprof-conv heap_rotateonly_gc.hprof heap_rotateonly_gc_mat.hprof

step4,MAT打开和查看内存堆文件

在xxx界面开始查询对应的Activity,以及该Activity在内存中的数目是5,在这个例子中,说明内存泄漏了
mat check heap

step5,修改bug,重复迭代

重新重复step1-step4,如果相应Activity的数目正常了,则可以认为内存泄漏已经修复

总结

在以前知识准备(Android内存管理和Android内存分析)的基础上,再做了一次内存泄漏检测的实战来进行应用内存的分析,对应的Demo地址在https://github.com/shuyinghuang/AndroidMemoryLeakDemo1

猜你喜欢

转载自blog.csdn.net/vshuang/article/details/83216477