lowmemorykiller
来源:互联网 发布:软件管理 编辑:程序博客网 时间:2024/05/17 03:01
frameworks\base\services\core\java\com\android\server\am\ProcessList.java
static final int VISIBLE_APP_ADJ = 100;static final int VISIBLE_APP_LAYER_MAX = PERCEPTIBLE_APP_ADJ - VISIBLE_APP_ADJ - 1;// This is the process running the current foreground app. We'd really// rather not kill it!static final int FOREGROUND_APP_ADJ = 0;// This is a process that the system or a persistent process has bound to,// and indicated it is important.static final int PERSISTENT_SERVICE_ADJ = -700;// This is a system persistent process, such as telephony. Definitely// don't want to kill it, but doing so is not completely fatal.static final int PERSISTENT_PROC_ADJ = -800;
定义应用不同情况下的 adj 。
private int[] mOomAdj;
private int[] mOomMinFree;
分别对应adj 与 内存,是对应的
if (mTotalMemMb <= LOW_LEVEL_SIZE) { mOomAdj = new int[] { FOREGROUND_APP_ADJ, VISIBLE_APP_ADJ, PERCEPTIBLE_APP_ADJ, BACKUP_APP_ADJ, CACHED_APP_MIN_ADJ, CACHED_APP_MAX_ADJ }; mOomMinFree = new int[] { 24576, // 24 * 1024 (ADJ 0 -> 24MB) 31744, // 31 * 1024 (ADJ 1 -> 31MB) 38912, // 38 * 1024 (ADJ 2 -> 38MB) 49152, // 48 * 1024 (ADJ 3 -> 48MB) 122880, // 120 * 1024 (ADJ 9 -> 120MB) (based on AMR performance test) 122880 // 120 * 1024 (ADJ 15 -> 120MB) (based on AMR performance test) };
一组默认的对应,第一个元素对应:当内存小于24MB 时,对应adj 大于 FOREGROUND_APP_ADJ 应用均可能被杀掉。
最后一个元素对应:当内存小于120MB时,对应adj 大于 CACHED_APP_MAX_ADJ 的应用会被杀掉。
这里adj 是 -11 ~ 15 似乎跟 mOomAdj 对应不上,这里其实是同一个意思,只是有一个换算。
kernel-3.18/include/uapi/linux/oom.h
#ifndef _UAPI__INCLUDE_LINUX_OOM_H#define _UAPI__INCLUDE_LINUX_OOM_H/* * /proc/<pid>/oom_score_adj set to OOM_SCORE_ADJ_MIN disables oom killing for * pid. */#define OOM_SCORE_ADJ_MIN (-1000)#define OOM_SCORE_ADJ_MAX 1000/* * /proc/<pid>/oom_adj set to -17 protects from the oom killer for legacy * purposes. */#define OOM_DISABLE (-17)/* inclusive */#define OOM_ADJUST_MIN (-16)#define OOM_ADJUST_MAX 15#endif /* _UAPI__INCLUDE_LINUX_OOM_H */
kernel-3.18\drivers\staging\android\lowmemorykiller.c
static short lowmem_oom_adj_to_oom_score_adj(short oom_adj){ if (oom_adj == OOM_ADJUST_MAX) return OOM_SCORE_ADJ_MAX; else return (oom_adj * OOM_SCORE_ADJ_MAX) / -OOM_DISABLE;}
这个函数说明了adj 是 -11 ~ 15 跟 mOomAdj 换算关系。/sys/module/lowmemorykiller/parameters/adj/sys/module/lowmemorykiller/parameters/minfree对应的是 mOomAdj 与 mOomMinFree转换成页之后的值
/proc/1052{$pid}/下oom_adj oom_score oom_score_adjoom_adj 与oom_score_adj 是 adj -11 ~ 15 跟 mOomAdj 对应一样的system/core/lmkd/lmkd.chttp://gityuan.com/2016/09/17/android-lowmemorykiller/
阅读全文
0 0
- lowmemorykiller
- Lowmemorykiller笔记
- Lowmemorykiller笔记
- LowMemoryKiller in Android
- Android分析之LowMemoryKiller
- Android分析之LowMemoryKiller
- Android分析之LowMemoryKiller
- Android分析之LowMemoryKiller
- android lowmemorykiller机制简介
- Android lowmemorykiller 原理分析
- Android 7.0 LowMemoryKiller 初识
- android lowmemorykiller笔记
- Android 的lowmemorykiller机制
- Android lowmemorykiller分析
- Android学习之lowmemorykiller driver
- lowmemorykiller的几点思考
- Android内存管理机制之LowMemoryKiller
- Android 6.0的lowmemorykiller机制
- &
- SparkSQL 简单测试
- 性能测试方案
- CAN波特率计算
- JMeter入门教程
- lowmemorykiller
- wordpress修改域名
- HTML
- Oracle:ORA-00392: log 3 of thread 1 is being cleared, operation not allowed
- editText中inputtype的使用属性
- logback详细介绍
- 无法使用VisualVM连接到 Tomcat
- ubuntu配置熟悉的搜狗输入法
- AngularJS 上传图片 手机端 安卓内置浏览器 无法上传