Low memory killer是安卓内存管理的一种策略,其主要目的在于当系统内存不足时按照进程的重要性程度杀掉一些进程来保证系统有足够内存。
Low memory killer
Low memory killer机制实现是在kernel里面,具体实现可参看:kernel/drivers/staging/android/lowmemorykiller.c,。其机制也比较简单,主要分为两个两面:
1)什么时候运行;
2)运行时根据什么来决定杀死哪个进程。
先看第一点,当你看到lowmemorykiller源码,会看到 initcall的如下操作:
static int __init lowmem_init(void)
{
register_shrinker(&lowmem_shrinker);
return 0;
}
相关lowmem_shrinker数据结构如下:
static struct shrinker lowmem_shrinker = {
.scan_objects = lowmem_scan,
.count_objects = lowmem_count,
.seeks = DEFAULT_SEEKS * 16
};
从代码可以看到,真正执行扫描并杀进程的是lowmem_scan这个函数。那么是谁来调用的呢?当当当。。。这个大功臣就是kswapd。kswapd是一个内核线程,它会在回收内存分页时遍历shrinker链表并执行回调,对于lowmemorykiller而言,也就是注册进去的lowmen_scan。