背景
系统运行,内存过低时,需回收内存。回收就需要判断进程优先级,ADJ代表进程优先级。
ADJ的详情
内核 通过 proc文件系统,暴露 /proc/[pid]/oom_score_adj文件,来允许其他程序修改指定进程的优先级。值越小进程越重要。内存紧张时,系统会遍历所有进程,以确定杀死哪个进程,回收内存,此时会读取 oom_score_adj 文件的值。
ProcessList.java中预定义了 oom_score_adj 的一些值。
public static final int INVALID_ADJ = -10000;//进程刚启动时
public static final int UNKNOWN_ADJ = 1001;
public static final int CACHED_APP_MAX_ADJ = 999;//不可见进程的adj最大值
public static final int CACHED_APP_MIN_ADJ = 900;//不可见进程的adj最小值
public static final int VISIBLE_APP_ADJ = 100;//可见进程
public static final int FOREGROUND_APP_ADJ = 0;//前台进程
public static final int SYSTEM_ADJ = -900;//system_serve进程
public static final int NATIVE_ADJ = -1000;//native进程,由init进程fork出来,不受system管控
ADJ查看
1.'ps | grep 包名' //查看app的进程号
2.cat /proc/进程号/oom_adj //查看进程的adj值(现已废弃,但仍然有效)
3.cat /proc/进程号/oom_score_adj //新版本查看adj,adj有效值为-1000~1000