Android 分析之 LowMemoryKiller
Android Kernel 会定时执行一次检查,杀死一些进程,释放掉内存。
那么,如何来判断,那些进程是需要杀死的呢?答案就是我们的标题:Low memory
killer 机制。
Low memory killer 则是定时进行检查。
Low memory killer 主要是通过进程的 oom_adj 来判定进程的重要程度。这个值越小,程序越
重要,被杀的可能性越低。
oom_adj 的大小和进程的类型以及进程被调度的次序有关。
Low memory killer 的具体实现可参看:kernel/drivers/misc/lowmemorykiller.c
1.oom_adj 的值是如何赋予的
进程的类型,可以在
ActivityManagerService 中清楚的看到:
static final int EMPTY_APP_ADJ;
static final int HIDDEN_APP_MAX_ADJ;
static final int HIDDEN_APP_MIN_ADJ;
static final int HOME_APP_ADJ;
static final int BACKUP_APP_ADJ;
static final int SECONDARY_SERVER_ADJ;
static final int HEAVY_WEIGHT_APP_ADJ;
static final int PERCEPTIBLE_APP_ADJ;
static final int VISIBLE_APP_ADJ;