Android 内存优化

2020-09-25  本文已影响0人  BinZzz

Android 内存管理机制

image.png

内存管理

针对进程的内存策略

针对对象、变量的内存策略

Android对于对象,变量的内存策略同java
内存管理 = 对象 / 变量的内存分配 + 内存释放

内存分配策略

具体实例

public class Sample {    
    // 该类的实例对象的成员变量s1、mSample1 & 指向对象存放在堆内存中
    int s1 = 0;
    Sample mSample1 = new Sample();   
    
    // 方法中的局部变量s2、mSample2存放在 栈内存
    // 变量mSample2所指向的对象实例存放在 堆内存
    public void method() {        
        int s2 = 0;
        Sample mSample2 = new Sample();
    }
}
    // 变量mSample3的引用存放在栈内存中
    // 变量mSample3所指向的对象实例存放在堆内存
    // 该实例的成员变量s1、mSample1也存放在堆内存中
    Sample mSample3 = new Sample();

内存释放策略

对象 / 变量的内存释放 由Java垃圾回收器(GC)/ 帧栈 负责

Java垃圾回收器(GC)的内存释放 = 垃圾回收算法,主要包括:


image.png
image.png

常见的内存问题 & 优化方案

内存泄露

即 ML(Memory Leak),指程序在申请内存后,当该内存不需再使用但却无法被释放 & 归还给程序的现象),容易使得应用程序发生内存溢出,即 OOM


image.png
image.png

常见内存泄露原因:

图片资源Bitmap相关

image.png
image.png

内存抖动

image.png

优化方案:尽量避免频繁创建大量、临时的小对象

代码质量 & 数量

常见使用

image.png

注:
还有1个内存优化的终极方案:调大虚拟机Dalvik的堆内存大小
即 在AndroidManifest.xml的application标签中增加一个android:largeHeap属性(值 = true),从而通知虚拟机 应用程序需更大的堆内存
但不建议 & 不鼓励该做法

额外小技巧:

辅助内存优化的分析工具

总结

image.png
上一篇下一篇

猜你喜欢

热点阅读