[性能优化]使用LeakCanary优化你的app

2020-01-20  本文已影响0人  qiHuang112

前言

在日常开发中,可能经常会遇到一些莫名奇妙的崩溃问题,但是仔细查看代码逻辑却似乎也找不出代码中有哪些不对的逻辑。这时候就需要仔细分析,你的代码中是否存在内存泄漏的问题。LeakCanary是Square公司开源的一款性能优化工具,它能够帮你方便的分析你的app中是否存在内存泄漏的问题。在使用LeakCanary之前,让我们先来了解几个概念。

一些概念

使用LeakCanary

内存泄漏在安卓app中十分常见,小内存泄漏的积累会导致应用内存不足,并导致OOM崩溃。LeakCanary将帮助我们在开发期间找到这些内存泄漏。
使用LeakCanary十分简单,只需要找到·build.gradle·,并在·dependencies·中加入引用即可。

dependencies {
  // debugImplementation because LeakCanary should only run in debug builds.
  debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.1'
}

我们可以通过过滤LeakCanary标签在Logcat中查看。

分析内存泄漏

当发生内存泄漏的时候,LeakCanary会自动帮你保存内存泄漏信息,并将内存泄漏相关的代码以另一个app的形式展示给你,你可以根据提示,修改代码,从而解决内存泄漏的问题。

如何解决内存泄漏呢

内存泄漏常常存在的原因是因为两个或多个对象生命周期不同,同时存在相互引用。导致生命周期短的对象被生命周期长的对象引用后无法正常回收,从而造成内存泄漏。
下面是一个可能经常遇见的内存泄漏的小例子:

这应该是年前写的最后一篇了,希望这篇文章能够帮到你。


  1. 最初是将内存分为相等的两块,只用其中的一块,当这块内存满的时候,将其中存活的对象复制到另一块内存中,然后GC 回收释放之前这块内存。

  2. 就是遍历GC Root,标记可达不可达对象,然后回收不可达对象,这种算法缺点是效率低,无法回收连续物理内存,后来升级为标记 - 整理算法,将可达对象移动到内存的一端,然后GC回收剩下部分连续的物理内存。

  3. 分代算法,在Java中,将内存中的对象按照生命周期长短分成新生代,老年代,永久代

上一篇 下一篇

猜你喜欢

热点阅读