background image

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;