「性能优化4.1」内存优化的三个方面及工具

内存优化的三个方面

APP 内存优化一般从 内存抖动,内存泄露,内存溢出这三个方面进行分析。

内存抖动

内存抖动是内存频繁分配和回收,导致可用内存不稳定。

内存图是锯齿状,频繁 GC

结果是产生内存碎片,内存碎片也是被视为可用内存,但是由于不连续的内存片段导致可以分配的连续内存空间变少,严重情况会导致 OOM。

//每隔20ms去创建一个 String 数组,这样会频繁的创建对象,回收对象,导致内存抖动
new Handler().postDelay(new Runnable(){
        String[] value = new String[100000];
         postDelay...
    },20)
}

内存泄露

内存泄露是本该被回收的对象没有被回收,导致可用内存在减少

表现为内存抖动,可用内存减少

导致频繁 GC,严重情况会导致 OOM

Activity 中如果直接 new Handler() 做延迟操作,如果此时页面关闭之前 Handler 的任务还没执行完毕,那么就会有内存泄露的情况。

内存溢出

可用内存不足,导致 OOM,对于上面提到的内存抖动,内存泄露会可能引起内存溢出。

//内存溢出的栗子
while(true){
    arrayList.add(new Object);
}

内存优化相关的工具介绍

Memory Profiler

这是 AS 自带的一个工具,它的好处如下:

  • 实时图表示当前应用的内存使用量
  • 识别内存泄露,内存抖动

如果实时图中显示内存不断的在飙升,那么就有可能是内存泄露。

  • 提供堆转储的功能,强制 GC 及跟踪内存分配情况

如果实时图频繁出现锯齿状,那么就有可能出现内存抖动。

Memory Analyzer(MAT)

MAT 是一个强大的 heap 分析工具,主要用于分析内存泄露内存占用

LeakCanary

相比 Memory Profile 和 MAT 来说,LeakCanary 是一个自动化内存泄露检测工具。

总结

在本文只是对内存优化做了简单地总结,没有使用实际的栗子来验证,在接下来的博客中我再来总结。

本文是笔者学习之后的总结,方便日后查看学习,有任何不对的地方请指正。

记录于 2019年4月22号

你可能感兴趣的:(「性能优化4.1」内存优化的三个方面及工具)