内存管理机制

129 阅读1分钟

Java内存管理机制

Java内存分配

137101453.png

Java内存回收算法

标记-清除算法

标记出所有需要回收的对象

统一回收所有被标记的对象

137111196.png 标记和清除效率不高

产生大量不连续的内存碎片

复制算法

将内存划分为大小相等的两块

一块内存用完之后复制存活对象到另一块

清理另一块内存

137082319.png 实现简单,运行高效

浪费一半空间,代价大

标记-整理算法

标记过程与“标记-清除”算法一样

存活对象往一端进行移动

清理其余内存

137082360.png 避免标记-清理导致的内存碎片

避免复制算法的空间浪费

分代收集算法

结合多种收集算法优势

新生代对象存活率低,用复制算法

老年代对象存活率高,用标记-整理算法

Android内存管理机制

内存弹性分配,分配值与最大值受具体设备影响

OOM场景:内存真正不足(app内存超标)、可用内存不足(手机内存不足,app实际内存没有超标)

Dalvik与Art区别

Dalvik仅固定一种回收算法

Art回收算法可运行期选择

Art具备内存整理能力,减少内存空洞

Low Memory Killer

进程分类,前台进程、可见进程、服务进程、后台进程、空进程

回收收益