Android内存进程管理,Low Memory Killer机制

Android系统保留进程以加速下次启动,但长时间运行会导致内存紧张。Low Memory Killer机制通过对比oom_adj值和minfree阈值来清理内存。adj数组定义进程的优先级,minfree数组设定内存阈值。内存管理在init.rc中初始化,ActivityManagerService动态调整。进程分为6级:前台、可见、次要服务、后台、内容供应节点和空进程。堆内存动态分配,当利用率超过特定比例时扩大或缩小。
摘要由CSDN通过智能技术生成

当我们要退出一个进程时只能按返回键,而该进程并没有真正的关闭,进程依然是存在于内存之中.这样设计的目的是为了下次能快速启动.当然,随着系统运行时间的增长,内存会越来越少,所以系统会定期执行一次检查,清理一些进程,释放掉内存.这就是Android的Low Memory Killer机制

在kernel/drivers/staging/android/路径下的lowmemorykiller.c文件定义了lowmem_adj和lowmem_minfree两个数组,一个是adj 数组,描述process 所对应的oom_adj,另外一个是minfree数组,描述process 所对应的memory 的阈值,代码如下(Android6.0):

static short lowmem_adj[6] = {
    0,
    1,
    6,
    12,
};
static int lowmem_adj_size = 4;
static int lowmem_minfree[6] = {
    3 * 512,    /* 6MB */
    2 * 1024,   /* 8MB */
    4 * 1024,   /* 16MB */
    16 * 1024,  /* 64MB */
};
  • Low Memory Killer在用户空间中指定了一组内存临界值,当其中的某个值与进程描述中的oom_adj值在同一范围时,该进程将被Kill掉
  • Android中的oom相关参数在init.rc中进行初始化配置,在系统运行时由ActivityManagerService进行动态调整。

当内存达到对应阀值时会按优先级清理对应阀值的进程

查看系统阀值: adb shell cat /sys/module/lowmemorykiller/parameters/minfree

C:\Users\admin>adb shell cat /sys/module/lowmemorykiller/parameters/minfree
18432,23040,27648,32256,55296,80640
以上数字的单位是page. 1 page = 4 k
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值