Android Low Memory Killer
Android 2.3.4
Android 的Low memory killer是基于linux的OOM(out of memory)规则改进而来的。
Low Memory Killer follows two rules:
• The importance of processes
• Memory each process occupies
The importance of processes depends on the value ofoom_adj of each process. oom_adj is defined in “\system\core\rootdir\init.rc”and ActivityManagerService.java.
oom_adj in \system\core\rootdir\init.rc
# Define the oom_adj values for the classes of processes that can killed by the kernel. These are used in ActivityManagerService.
setprop ro.FOREGROUND_APP_ADJ 0
setprop ro.VISIBLE_APP_ADJ 1
setprop ro.PERCEPTIBLE_APP_ADJ 2
setprop ro.HEAVY_WEIGHT_APP_ADJ 3
setprop ro.SECONDARY_SERVER_ADJ 4
setprop ro.BACKUP_APP_ADJ 5
setprop ro.HOME_APP_ADJ 6
setprop ro.HIDDEN_APP_MIN_ADJ 7
setprop ro.EMPTY_APP_ADJ 15
ActivityManagerService.java (/frameworks/base/services/com/android/server/am/)
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;
static final int FOREGROUND_APP_ADJ;
static final int CORE_SERVER_ADJ = -12;
static final int SYSTEM_ADJ = -16;
Command “dumpsys activity” to show oom_adj for each activity, not including monkey process.
Running processes (most recent first):
Proc # 0: adj=fore /F 4065fd80 244:android.process.media/10000 (top-activity)
Proc # 1: adj=bak /B 406444a8 356:com.android.customlocale/10014 (bg-activities)
Proc # 2: adj=vis /F 405ac430 116:jp.co.omronsoft.openwnn/10004 (service)
jp.co.omronsoft.openwnn/.OpenWnnJAJP<=Proc{405a8a28 61:system/1000}
PERS # 3: adj=sys /F 405a8a28 61:system/1000 (fixed)
Proc # 4: adj=bak+1/B 40736650 291:com.android.email/10028 (bg-activities)
Proc # 5: adj=bak+2/B 406c7d00 333:com.android.test/10034 (bg-activities)
Proc # 6: adj=home /B 406664d0 134:com.android.launcher/10013 (home)
Proc # 7: adj=bak+3/B 40668408 236:com.android.quicksearchbox/10002 (bg-empty)
Proc # 8: adj=bak+4/B 407853a0 313:com.svox.pico/10009 (bg-empty)