Java内存管理机制
Java内存分配
Java内存回收算法
标记-清除算法
标记出所有需要回收的对象
统一回收所有被标记的对象
标记和清除效率不高
产生大量不连续的内存碎片
复制算法
将内存划分为大小相等的两块
一块内存用完之后复制存活对象到另一块
清理另一块内存
实现简单,运行高效
浪费一半空间,代价大
标记-整理算法
标记过程与“标记-清除”算法一样
存活对象往一端进行移动
清理其余内存
避免标记-清理导致的内存碎片
避免复制算法的空间浪费
分代收集算法
结合多种收集算法优势
新生代对象存活率低,用复制算法
老年代对象存活率高,用标记-整理算法
Android内存管理机制
内存弹性分配,分配值与最大值受具体设备影响
OOM场景:内存真正不足(app内存超标)、可用内存不足(手机内存不足,app实际内存没有超标)
Dalvik与Art区别
Dalvik仅固定一种回收算法
Art回收算法可运行期选择
Art具备内存整理能力,减少内存空洞
Low Memory Killer
进程分类,前台进程、可见进程、服务进程、后台进程、空进程
回收收益