frameworks\base\services\core\java\com\android\server\am\ProcessList.java
static final int VISIBLE_APP_ADJ = 100; static final int VISIBLE_APP_LAYER_MAX = PERCEPTIBLE_APP_ADJ - VISIBLE_APP_ADJ - 1; // This is the process running the current foreground app. We'd really // rather not kill it! static final int FOREGROUND_APP_ADJ = 0; // This is a process that the system or a persistent process has bound to, // and indicated it is important. static final int PERSISTENT_SERVICE_ADJ = -700; // This is a system persistent process, such as telephony. Definitely // don't want to kill it, but doing so is not completely fatal. static final int PERSISTENT_PROC_ADJ = -800;
定义应用不同情况下的 adj 。
private int[] mOomAdj;
private int[] mOomMinFree;
分别对应adj 与 内存,是对应的
if (mTotalMemMb <= LOW_LEVEL_SIZE) { mOomAdj = new int[] { FOREGROUND_APP_ADJ, VISIBLE_APP_ADJ, PERCEPTIBLE_APP_ADJ, BACKUP_APP_ADJ, CACHED_APP_MIN_ADJ, CACHED_APP_MAX_ADJ }; mOomMinFree = new int[] { 24576, // 24 * 1024 (ADJ 0 -> 24MB) 31744, // 31 * 1024 (ADJ 1 -> 31MB) 38912, // 38 * 1024 (ADJ 2 -> 38MB) 49152, // 48 * 1024 (ADJ 3 -> 48MB) 122880, // 120 * 1024 (ADJ 9 -> 120MB) (based on AMR performance test) 122880 // 120 * 1024 (ADJ 15 -> 120MB) (based on AMR performance test) };
一组默认的对应,第一个元素对应:当内存小于24MB 时,对应adj 大于 FOREGROUND_APP_ADJ 应用均可能被杀掉。
最后一个元素对应:当内存小于120MB时,对应adj 大于 CACHED_APP_MAX_ADJ 的应用会被杀掉。
这里adj 是 -11 ~ 15 似乎跟 mOomAdj 对应不上,这里其实是同一个意思,只是有一个换算。
kernel-3.18/include/uapi/linux/oom.h
#ifndef _UAPI__INCLUDE_LINUX_OOM_H #define _UAPI__INCLUDE_LINUX_OOM_H /* * /proc/<pid>/oom_score_adj set to OOM_SCORE_ADJ_MIN disables oom killing for * pid. */ #define OOM_SCORE_ADJ_MIN (-1000) #define OOM_SCORE_ADJ_MAX 1000 /* * /proc/<pid>/oom_adj set to -17 protects from the oom killer for legacy * purposes. */ #define OOM_DISABLE (-17) /* inclusive */ #define OOM_ADJUST_MIN (-16) #define OOM_ADJUST_MAX 15 #endif /* _UAPI__INCLUDE_LINUX_OOM_H */
kernel-3.18\drivers\staging\android\lowmemorykiller.c
static short lowmem_oom_adj_to_oom_score_adj(short oom_adj) { if (oom_adj == OOM_ADJUST_MAX) return OOM_SCORE_ADJ_MAX; else return (oom_adj * OOM_SCORE_ADJ_MAX) / -OOM_DISABLE; }
这个函数说明了
adj 是 -11 ~ 15 跟 mOomAdj 换算关系。
/sys/module/lowmemorykiller/parameters/adj
/sys/module/lowmemorykiller/parameters/minfree
对应的是 mOomAdj 与 mOomMinFree转换成页之后的值
/proc/1052{$pid}/下
oom_adj oom_score oom_score_adj
oom_adj 与oom_score_adj 是 adj -11 ~ 15 跟 mOomAdj 对应一样的
system/core/lmkd/lmkd.c
http://gityuan.com/2016/09/17/android-lowmemorykiller/