进程保活之LMK(LowMemoryKiller)的理解

想要了解有关进程优先级请自行查看上一篇文章:https://blog.csdn.net/qq_36451275/article/details/95454643

这篇文章我们来了解一下有关LMK(LowMemoryKiller),咋一看这个大家应该都不怎么了解,对于这一块我也不是很了解,最近看到相关的资料就简单的进行了整理。

一、为什么要引入LMK呢?

进程的启动分冷启动和热启动,当用户退出某一个进程的时候,并不会真正的将进程退出,而是将这个进程放到后台,以便下次启动的时候可以马上启动起来,这个过程名为热启动,这也是Android的设计理念之一。这个机制会带来一个问题,每个进程都有自己独立的内存地址空间,随着应用打开数量的增多,系统已使用的内存越来越大,就很有可能导致系统内存不足。为了解决这个问题,系统引入LowmemoryKiller(简称lmk)管理所有进程,根据一定策略来kill某个进程并释放占用的内存,保证系统的正常运行

二、LMK基本原理:

所有应用进程都是从zygote孵化出来的,记录在AMS中mLruProcesses列表中,由AMS进行统一管理,AMS中会根据进程的状态更新进程对应的oom_adj值,这个值会通过文件传递到kernel中去,kernel有个低内存回收机制,在内存达到一定阀值时会触发清理oom_adj值高的进程腾出更多的内存空间

三、LMK杀死进程标准:

1、minfree

存放6个数值,单位内存页面数(一个页面4kb)

adb shell
su
cat /sys/module/lowmemorykiller/parameters/minfree

2、adj

cat /sys/module/lowmemorykiller/parameters/adj

3、查看进程的adj值

/proc//oom_adj

/proc//oom_score_adj

4、内存阈值在不同的手机上不一样,一旦低于该值,Android便开始按顺序关闭进程. 因此Android开始结束优先级最低的空进程,即当可用内存小于180MB(46080)

 

你可能感兴趣的:(进程保活)