众所周知,低内存杀手在固定时间开始。“固定时间”有多长?配置它的代码在哪里?
问问题
7372 次
2 回答
11
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
(最后被杀死,这永远不会发生)。
于 2014-01-15T09:57:10.130 回答
0
在异步情况下,LMK 由内核页面输出守护进程 (kswapd) 计时。所以我想你可以更深入地研究 kswapd 控制流程,以确定它的唤醒时间是否有界,这将为你关于时序约束的问题提供部分答案。
LMK 收缩器回调也可以在 kswapd 上下文之外调用。当系统执行直接同步页面回收时会发生这种情况(参见.mm/page_alloc.c)
参考说明:
相关的 SO 问题/答案
于 2014-01-24T21:59:32.673 回答