发布网友 发布时间:2022-11-20 20:29
共1个回答
热心网友 时间:2024-07-24 21:28
Low memory killer是Android内存清理机制,因移动端设备的内存、性能、电量等因素Android内核维护一套内存清理机制,就是LMK机制,会定期检查应用内存使用情况、杀死一些进程来释放内存,Low memory killer 主要通过进程oom_adj来判定进程重要度,这个值越小程序越重要,被杀死的可能性越低。
Low memory killer根据两个原则,进程的重要性和释放这个进程可获取的空闲内存数量,来决定释放的进程。
(1) 进程分类,后面的数字为oom_adj值,每个进程都有oom_adj值,越小越重要,被杀的可能性越低,在相同oom_adj下内存占用大的优先被回收。
(2) Android有两个数组,lowmem_adj和lowmen_minfree,lowmem_adj存放着oom_adj的阈值,lowmen_minfree存放minfree的警戒值,单位为页(一页4K),通过这两个数组计算需要回收的进程。
(3) LMK检查的时候基于多个标准来给每个进程评分,对adj高于多少(min_adj)的进程进行分析是否释放,评分最高的被选中并Kill。
进程的oom_adj是可以配置的,进程的类型在ActivityManagerService中可以看到。
进程类型:
其中SYSTEM_ADJ代表着系统进程,CORE_SERVER_ADJ为系统核心服务,这类进程永远不会被杀死,EMPTY_APP、CONTENT_PROVIDER 只类的最容易被杀死,FOREGROUND的进程很难被杀死。