Android 内存分析工具:LeakCanary和Memory Profiler

本文介绍了两款Android内存检测工具。LeakCanary可通过Log指出代码中内存泄露位置,添加依赖并在Application中安装即可使用,还可注册RefWatcher监测特定对象。Memory Profiler是Android Profiler组件,能识别内存问题,可显示内存使用实时图形,还能捕获堆信息等。

一、LeakCanary

一款非常好用的内存泄露检测工具,能够通过Log的方式告诉你是哪块代码发生了内存泄露。

使用方法:添加依赖 -> Application中install LeakCanary (默认只能检测Activity内容的内存泄露)

debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.1'
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.1'
public class MyApplication extends Application {

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

想要检查更多时,注册一个RefWatcher:

public class MyApplication extends Application {

    private static RefWatcher sRefWatcher;

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

    public static RefWatcher getRefWatcher() {
        return sRefWatcher;
    }
}

然后对某个可能发生泄露的占用大内存的对象进行监测,例如Fragment

public class MyFragment extends Fragment {
    @Override
    public void onDestroy() {
        super.onDestroy();
        MyApplication.getRefWatcher().watch(this);
    }
}

更多详细使用:https://github.com/square/leakcanary

二、Memory Profiler

Memory Profiler是Android Profiler中的一个组件 ,可帮助您识别因内存泄漏和内存抖动导致的卡顿,无响应,甚至crashes。它显示了应用程序内存使用的实时图形,可以捕获堆信息,强制GC以及跟踪内存分配。

在新版本的Android Studio,可以在底部按钮看到(如下图1),如果没有底部按钮,点击View -> Tool Buttons。

在下图2处选择模拟器或者真机,在下图3选择进程,即可实时监测到CPU,Memory,Network等状态。

点击Memory可以看到如下图提示。

点击heap dump图标,可以看到堆信息

上图中2选择app heap,3按照package排列,从4的com文件夹下可以找到我们的app应用,5为堆中的一些参数。

上图有方则为选中对象的实例和引用,以及各项参数,分析内存使用一般就是看这些实例和引用是否科学,是否存在内存占用过高,存在内存泄漏。

关于上图5中的参数:

Shallow Size:对象本身占用的内存空间,不包含其引用的对象。

Retained Size:对象本身的Shallow Size + 对象能直接或间接访问到的对象的Shallow Size,即该对象被gc之后所能回收内存的总和。

 Heap Size: 堆的大小,当资源增加,当前堆的空间不够时,系统会增加堆的大小,若超过上限(如64M,阈值视平台而定)则会被杀掉。

Allocated: 堆中已分配的大小,即App应用实际占用的内存大小,资源回收后,此项数据会变小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KWMax

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值