首先,我们要明白OOM是一种异常,LMK是Android系统上的一种防止OOM的内存保护机制。
关于LowMemoryKiller
Andorid的Low Memory Killer是在标准的linux lernel的OOM基础上修改而来的一种内存管理机制。
使用LowMemoryKiller可以使系统内存较低时,调出进程管理器结束不必要的人进程释放空间。在安卓中,如果等到真正的OOM时,也许进程管理器就已经没法启动了。
Android在系统内存不足时,会触发LMK,根据应用的进程优先级来决定哪个应用先被杀回收,一般规则为:
-
进程的oom_adj越大,表示此进程优先级越低,越容易被杀回收;越小,表示进程优先级越高,越不容易被杀回收
-
普通app进程的oom_adj>=0,系统进程的oom_adj才可能<0
关于应用的进程优先级
-
查询应用的进程优先级
ps -A | grep packageName
cat /proc/pid/oom_adj
-
应用进程优先级分类