- Linux内存管理机制
- 虚拟内存:将外部存储器划分一部分拓展空间,内存不足时系统选取优先级较低的代码块转移到拓展空间中,之后若用到被转移的代码块则交换转移回来。此过程由系统自动完成,对上层完全透明
- COW(copy on write):多个对象在起始时共享某个资源,只有在某个对象需要进行修改时才为其开辟一份自己的拷贝。避免了不必要的资源操作,提升了运行速度
- 内存保护:分段与分页管理
- 存储分配与回收
- 需要保证操作系统向上透明
- 动态分配存储与回收
- 已分配的内存释放造成内存碎片的问题
- OOMKiller
- 系统可以内存达到临界值时按照一定优先顺序回收内存
- 内核内每个进程都有一个权重值oom_adj,根据权重、进程消耗内存、进程占用CPU时间为进程评分oom_score,分数越低被收回得越晚
- 虚拟内存:将外部存储器划分一部分拓展空间,内存不足时系统选取优先级较低的代码块转移到拓展空间中,之后若用到被转移的代码块则交换转移回来。此过程由系统自动完成,对上层完全透明
- Android Low Memory Killer(LMK)
- 设置shrinker监听回调机制,系统空闲内存低于某一档值后就会回收优先级低于对应档权重的进程
- lowmem_minfree数组定义系统预定义的空闲内存{6MB,8MB,16MB,64MB};lomem_adj数组定义系统预定义对应层级需要被处理的adj值{0,1,6,12}(取值范围-17——15),数值越大,进程级别越低。(可以自定义修改这两个数组)
- 在AndroidManifest.xml中为application标签添加“android:persistent=true”属性,可以将此应用程序设置为常驻内存,但是要保证程序本身足够完善,不会导致系统内存泄漏
网友评论