Android 内存优化深入探索(一)

一、重识内存优化

Android给每个应用进程分配的内存都是非常有限的,那么,为什么不能把图片下载下来都放到磁盘中呢?那是因为放在 内存 中,展示会更 “”,快的原因有两点,如下所示:

  • 1)、硬件快:内存本身读取、存入速度快。
  • 2)、复用快:解码成果有效保存,复用时,直接使用解码后对象,而不是再做一次图像解码。

这里说一下解码的概念。Android系统要在屏幕上展示图片的时候只认 “像素缓冲”,而这也是大多数操作系统的特征。而我们 常见的jpg,png等图片格式,都是把 “像素缓冲” 使用不同的手段压缩后的结果,所以这些格式的图片,要在设备上 展示,就 必须经过一次解码,它的 执行速度会受图片压缩比、尺寸等因素影响。(官方建议:把从内存中淘汰的图片,降低压缩比后存储到本地,以备后用,这样可以最大限度地降低以后复用时的解码开销。)

下面,我们来了解一下内存优化的一些重要概念。

1、手机RAM

手机不使用 PCDDR内存,采用的是 LPDDR RAM,即 ”低功耗双倍数据速率内存“。其计算规则如下所示:

LPDDR系列的带宽 = 时钟频率 ✖️内存总线位数 / 8
LPDDR4 = 1600MHZ ✖️64 / 8 ✖️双倍速率 = 25.6GB/s。

那么内存占用是否越少越好?

当系统 内存充足 的时候,我们可以 多用 一些获得 更好的性能。当系统 内存不足 的时候,我们希望可以做到 ”用时分配,及时释放“。

2、内存优化的纬度

对于Android内存优化来说又可以细分为如下两个维度,如下所示:

  • 1)、RAM优化
  • 2)、ROM优化

1、RAM优化

主要是 降低运行时内存。它的 目的 有如下三个:

  • 1)、防止应用发生OOM
  • 2)、降低应用由于内存过大被LMK机制杀死的概率
  • 3)、避免不合理使用内存导致GC次数增多,从而导致应用发生卡顿

2、ROM优化

降低应用占ROM的体积,进行APK瘦身。它的 目的 主要是为了 降低应用占用空间,避免因ROM空间不足导致程序无法安装

3、内存问题

那么,内存问题主要是有哪几类呢?内存问题通常来说,可以细分为如下 三类:

  • 1)、内存抖动
  • 2)、内存泄漏
  • 3)、内存溢出

下面,我们来了解下它们。

1、内存抖动

内存波动图形呈 锯齿张GC导致卡顿

这个问题在 Dalvik虚拟机 上会 更加明显,而 ART虚拟机内存管理跟回收策略 上都做了 大量优化内存分配和GC效率相比提升了5~10倍,所以 出现内存抖动的概率会小很多

2、内存泄漏

Android系统虚拟机的垃圾回收是通过虚拟机GC机制来实现的。GC会选择一些还存活的对象作为内存遍历的根节点GC Roots,通过对GC Roots的可达性来判断是否需要回收。内存泄漏就是 在当前应用周期内不再使用的对象被GC Roots引用,导致不能回收,使实际可使用内存变小。简言之,就是 对象被持有导致无法释放或不能按照对象正常的生命周期进行释放。一般来说,可用内存减少、频繁GC,容易导致内存泄漏

3、内存溢出

即OOM,OOM时会导致程序异常。Android设备出厂以后,java虚拟机对单个应用的最大内存分配就确定下来了,超出这个值就会OOM。单个应用可用的最大内存对应于 /system/build.prop 文件中的 dalvik.vm.heapgrowthlimit

此外,除了因内存泄漏累积到一定程度导致OOM的情况以外,也有一次性申请很多内存,比如说 一次创建大的数组或者是载入大的文件如图片的时候会导致OOM。而且,实际情况下 很多OOM就是因图片处理不当 而产生的。

二、常见工具选择

下面我们简单介绍一下相关的优化工具:

1、Memory Profiler

作用

  • 1)、实时图表展示应用内存使用量
  • 2)、用于识别内存泄漏、抖动等
  • 3)、提供捕获堆转储、强制GC以及根据内存分配的能力

优点

  • 1)、方便直观
  • 2)、线下使用

2、Memory Analyzer

强大的 Java Heap 分析工具,查找 内存泄漏及内存占用, 生成 整体报告分析内存问题 等等。建议 线下深入使用

3、LeakCanary

自动化 内存泄漏检测神器。建议仅用于线下集成

它的 缺点 比较明显,具体有如下两点:

  • 1)、虽然使用了 idleHandler与多进程,但是 dumphprof 的 SuspendAll Thread 的特性依然会导致应用卡顿
  • 2)、在三星等手机,系统会缓存最后一个Activity,此时应该采用更严格的检测模式

作者:jsonchao
链接:https://juejin.cn/post/6844904099998089230
来源:稀土掘金

猜你喜欢

转载自blog.csdn.net/m0_64420071/article/details/126235967