当前位置:首页 > 内存 > 正文

android内存管理机制

  • 内存
  • 2024-05-27 00:36:25
  • 4304

一、LMK机制(LowMemoryKiller)

Lowmemorykiller是Android的内存清理机制。由于移动设备的内存、性能、功耗等因素,Android内核维护了一种内存清理机制,这就是LMK机制。它会定期检查应用程序内存使用情况并杀死一些进程以释放内存。,Lowmemorykiller主要通过进程oom_adj来判断进程重要性。值越小,程序越重要,被杀死的可能性越低。

Lowmemorykiller根据两个原则来决定要释放的进程:进程的重要性以及释放进程可以获得的空闲内存量。
(1)进程分类,后面的数字是oom_adj值。每个进程都有一个oom_adj值。数值越小,越重要,被杀的可能性越低。相同oom_adj下,内存占用大的会先被回收。

(2)Android有两个数组,lowmem_adj和lowmen_minfree。lowmem_adj存储oom_adj的阈值,lowmen_minfree存储minfree的警告值。单位为页(4K页)。通过这两个数组计算需​​要的回收过程。

(3)当LMK检查时,它会根据多个标准对每个进程进行评分。分析adj高于(min_adj)的进程,看看是否应该释放它们。得分最高的人会被选中并杀死。

可以配置进程的oom_adj,在ActivityManagerService中可以看到进程的类型。
进程类型:

其中,SYSTEM_ADJ代表系统进程,CORE_SERVER_ADJ服务于系统核心。这种类型的进程永远不会被杀死。EMPTY_APP和CONTENT_PROVIDER是最容易被杀死的。FOREGROUND该进程很难被杀死。