Low memory killer

本文深入解析Android系统如何通过LowMemoryKiller机制优化内存使用,包括其工作原理、重要概念及关键日志信息解读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1,引入原因

   Android是一个多任务系统,也就是说可以同时运行多个程序,这个大家应该很熟悉。一般来说,启动运行一个程序是有一定的时间开销的,因此为了加快运行速度,当你退出一个程序时,Android并不会立即杀掉它,这样下次再运行该程序时,可以很快的启动。随着系统中保留的程序越来越多,内存肯定会出现不足,low memory killer就是在系统内存低于某值时,清除相关的程序,保障系统保持拥有一定数量的空闲内存。

 

 

2,基本原理和重要概念

   Low memory killer根据两个原则,进程的重要性和释放这个进程可获取的空闲内存数量,来决定释放的进程。

(1)进程的重要性,由task_struct->signal_struct->oom_adj决定。

Android将程序分成以下几类,按照重要性依次降低的顺序:

名称 oom_adj 解释 
FOREGROUD_APP 0 前台程序,可以理解为你正在使用的程序 
VISIBLE_APP 1 用户可见的程序 
SECONDARY_SERVER 2 后台服务,比如说QQ会在后台运行服务 
HOME_APP 4 HOME,就是主界面 
HIDDEN_APP 7 被隐藏的程序 
CONTENT_PROVIDER 14 内容提供者, 
EMPTY_APP 15 空程序,既不提供服务,也不提供内容


    其中每个程序都会有一个oom_adj值,这个值越小,程序越重要,被杀的可能性越低。

(2)进程的内存,通过get_mm_rss获取,在相同的oom_adj下,内存大的,优先被杀。

(3)那内存低到什么情况下,low memory killer开始干活呢?Android提供了两个数组,一个lowmem_adj,一个lowmem_minfree。www.linuxidc.com前者存放着oom_adj的阀值,后者存放着minfree的警戒值,以page为单位(4K)。

oom_adj 内存警戒值( 以4K为单位)
 
0 1536 
1 2048 
2 4096 
7 5120 
14 5632 
15 6144

3 log信息:

select 4203 (com.android.mms), adj 7, size 7035, to kill

ActivityManager: Process com.android.mms (pid 4203) has died.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值