Linux OOMKiller
1. 进程消耗的内存
2. 进程占用CPU的时间
3. oom_adj(OOM权重/proc/PID/oom_adj)
根据以上因素,系统会实时给每个进程评分,已决定OOM时应该杀死哪些进程。oom_score分数越高被杀死的几率越大
Andriod Low Memory Killer
当内存小于6M时,Killer需要清理adj值为0的进程
lowmen_adj | 描述 | lowmen_minfree |
---|---|---|
0 | 当前正在前台运行的进程 | 6M |
15 | 空进程 |
android:persistent
LargeHeap
在/system/build.prop
文件中记录了内存配置,AMS可以查看
- ams.getMemoryClass(); // 正常情况下内存大小
- ams.getLargeMemoryClass(); // 开启largeHeap最大内存
// 堆得初始大小
dalvik.vm.heapstartsize=8m
// 标准堆得最大大小
dalvik.vm.heapgrowthlimit=192m
// 使用largeHeap的最大大小
dalvik.vm.heapsize=512m
// 当前存活对象 / 堆大小
dalvik.vm.heaptargetutilization=0.75
// 单次堆内存调整最小值
dalvik.vm.heapminfree=512k
// 单次堆内存调整最大值
dalvik.vm.heapmaxfree=8m