众所周知,低记忆杀手在固定时间开始。 “固定时间”有多长?配置它的代码在哪里?
答案 0 :(得分:10)
Android LMK在某个特定时间没有开始释放内存,但它取决于minfree值:
/sys/module/lowmemorykiller/parameters/minfree
例如,如果cat /sys/module/lowmemorykiller/parameters/minfree
具有以下值:
1536,2048,4096,5120,5632,6144
然后,这意味着这些值是用于开始杀死这些特定类型进程的阈值内存。
FOREGROUND_APP:1536
VISIBLE_APP:2048
SECONDARY_SERVER:4096
HIDDEN_APP:5120
CONTENT_PROVIDER:5632
EMPTY_APP:6144
例如,当系统中的空闲内存(RAM)小于(6144 * 4/1024)= 24 MB时,LMK将开始终止EMPTY_APP
进程。同样地,如果仍然存储条件没有改善,它将开始在EMPTY_APP->CONTENT_PROVIDER->....->FOREGROUND_APP
中杀死进程(最后被杀死,这应该永远不会发生)。
答案 1 :(得分:0)
在异步情况下,LMK由内核pageout守护进程(kswapd)定时。所以我想你可以更深入地了解kswapd控制流程,以确定它的唤醒时间是否有限,这将为你提出关于时间约束的问题的部分答案。
也可以在kswapd上下文之外调用LMK收缩器回调。当系统执行直接同步页面回收(参见.mm / page_alloc.c)
时,会发生这种情况参考说明: