内存泄漏分析

前面我们已经介绍了内存分析可疑使用MAT和Memory Profiler,实际上内存泄漏的分析就是内存分析的一种。 在手机上一个app的可用内存非常宝贵,因此我们队内存泄漏的处理也是一场持久战,由于产品不断迭代,每个版本都需要定期分析处理。

案例

现在我们来看一个内存泄漏的例子,并通过不同工具来分析

Memory Profiler

假设我们闲杂有一个demo,不确定有没有内存问题,因此可以先用工具分析一下。 首先dump出当前的heap,并通过Memory Profiler直接查看,我们根据包名来简单归下档。

memory-profiler-leak

通过查看我们的包名下的对象,发现有两份MockData, 没有发现其他内存占用明显较大的对象;并且直接查看也不是很直观,仅仅是一些列表。

MAT

aven-mac-pro-2:platform-tools aven$ ./hprof-conv -z ~/Desktop/leak.hprof ~/Desktop/convert-leak.hprof

前面一节我们已经介绍了MAT的使用,现在我们打开hrof文件,更细致的排查一下。

mat-top-consume

mat-package-tree

leak-suspect

Leakcanary

在开发中,我们也经常集成LeakCanary来快速发现问题,在发现问题的效率上更高一些。

接入LeakCanary可以查阅官方文档,主要是依赖配置和接口调用,下面简单说一下:

dependencies {
  debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4'
  releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'
}
public class ExampleApplication extends Application {

  @Override public void onCreate() {
    super.onCreate();
    if (LeakCanary.isInAnalyzerProcess(this)) {
      // This process is dedicated to LeakCanary for heap analysis.
      // You should not init your app in this process.
      return;
    }
    LeakCanary.install(this);
    // Normal app init code...
  }
}

后续如果发生内存泄漏问题,会有通知栏提示,可以查看泄漏详情:

leakcanary-screenshot

powered by Gitbook更新: 2018-04-14

results matching ""

    No results matching ""