排查手机APP内存泄漏

排查内存泄漏最简单和直观的方法

 

  第1步:检测内存泄漏
  先说一个terminal指令:
  adb shelldumpsys meminfo (pid name)
  这条指令是用来查询这个进程所占用的内存的具体详情的,通过这条指令可以看到当前app在手机中占用的具体的堆内存大小,view的数量,activity的数量,等等。如下图:
  进程内存分配详情
 (1) 其中activity数目是非常关键的一个信息,可以帮助我们快速地检测出内存泄漏。我们可以反复地进入退出需要测试的目标activity,如果在反复进入退出之后,用terminal执行上面的语句查询当前的内存情况,如果发现activity数量一直在增长,那么内存泄露一定是发生了!
Objects中的Activities表示当前内存中的activity对象的个数,启动一个activity就会生成一个activity对象,当退出activity的时候,activity对象就会被释放,所以反复的进出一个activity界面然后查看Activities的个数有没有保持不变,如果增加了,那么就说明这个activity对象没有被释放,也就是说可能存在内存泄漏,但是具体哪里泄漏了并不知道。
 

(2) Native/Dalvik 的 Heap 信息

具体在上面的第一行和第二行,它分别给出的是JNI层和Java层的内存分配情况,如果发现这个值一直增长,则代表程序可能出现了内存泄漏。

Native Heap是native层的内存堆栈,Dalvik Heap是java层的内存堆栈,如果这二者加起来的内存占用超过了应用最大内存限制就会报OOM异常,剩下的.so mmap是 C 库代码占用的内存,.jar mmap是Java 文件代码占用的内存 ,.apk mmap是apk代码占用的内存,.dex mmap是Dex 文件代码占用的内存 

(3) Total 的 PSS 信息

这个值就是你的应用真正占据的内存大小,通过这个信息,你可以轻松判别手机中哪些程序占内存比较大了。

 

 
操作方法补充说明:
1. 先通过cmd打开命令窗口
2. 进入sdk目录所在盘符, 假设目录为D:\Program Files (x86)\Android\android-sdk\platform-tools, 输入命令D :
(sdk下载: http://www.android-studio.org/, 可以只下载sdk)

 

3. 输入命令进入sdk目录, cd D:\Program Files (x86)\Android\android-sdk\platform-tools
4. 输入命令  adb start-service
5. 输入命令 adb shell

 

6. 输入命令: dumpsys meminfo,  找到对应APP的进程id

 

7. 再输入命令:  dumpsys meminfo (pid name)

 

posted @ 2018-02-06 10:26  xxm_2017  阅读(792)  评论(0编辑  收藏  举报