Android性能之一续:内存泄露的分析、处理工具

上一篇http://blog.csdn.net/srp123/article/details/78667872介绍了android内存泄露的原理,这一篇介绍Android内存泄露的分析、处理。


一、检测内存泄露

1、adb命令获取内存使用情况

通过命令行adb shell dumpsys meminfo packagename查看内存详细占用情况:

关键字段:

  • Private(Clean和Dirty的):应用进程单独使用的内存,代表着系统杀死你的进程后可以实际回收的内存总量**。通常需要特别关注其中更为昂贵的dirty部分,它不仅只被你的进程使用而且会持续占用内存而不能被从内存中置换出存储。申请的全部Dalvik和本地heap内存都是Dirty的,和Zygote共享的Dalvik和本地heap内存也都是Dirty的。
  • Dalvik Heap:Dalvik虚拟机使用的内存,包含dalvik-heap和dalvik-zygote,堆内存,所有的Java对象实例都放在这里。
  • Heap Alloc:累加了Dalvik和Native的heap。
  • PSS:这是加入与其他进程共享的分页内存后你的应用占用的内存量,你的进程单独使用的全部内存也会加入这个值里,多进程共享的内存按照共享比例添加到PSS值中。如一个内存分页被两个进程共享,每个进程的PSS值会包括此内存分页大小的一半在内。
    Dalvik Pss内存 = 私有内存Private Dirty + (共享内存Shared Dirty / 共享进程数)
  • TOTAL:上面全部条目的累加值,全局的展示了你的进程占用的内存情况。
  • ViewRootImpl:应用进程里的活动窗口视图个数,可以用来监测对话框或者其他窗口的内存泄露。
  • AppContexts及Activities:应用进程里Context和Activity的对象个数,可以用来监测Activity的内存泄露。
2、 DDMS的heap查看

3、Android Studio的monitor


二、内存泄露分析

1、分析.prof文件

1.1 如何dump出.prof文件?

  1. 打开DDMS ,Eclipse 可以切到DDMS视图,Android studio可以从Tools-Android-Android device monitor进入DDMS

  2. 找到app的进程,在进程上方点击“update heap”按钮,可以先主动出发一次GC,待内存占用数据稍微稳定下来后 点击“Dump HProf File”,便可以导出.prof文件

1.2 分析.prof的工具

(1)MAT工具

(2)Android的monitors工具

2、第三方开源工具

2.1 LeakCanary工具

使用方法很简单:

build.gradle 中加入引用,不同的编译使用不同的引用:

 dependencies {
   debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'
   releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'
 }

Application 中:

public class ExampleApplication extends Application {

  @Override public void onCreate() {
    super.onCreate();
    LeakCanary.install(this);
  }
}








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值