【性能】【内存】低内存回收解读

Android 有两种处理内存不足的进程:内核交换守护进程(kswapd)和低内存终止守护进程(LowMemoryKiller)。

 

对应着两种内存不足时候的处理方式。

kswapd

1、kswapd, 是 Linux 内核的一部分,用于将已使用内存转换为可用内存。当设备上的可用内存不足时,该守护进程将变为活动状态。

对于RAM与zRAM,Android 使用了跟 Linux 相似的管理手法,分页。RAM 分为多个“页”。通常,每个页面为4KB 的内存。系统会将页面分为“可用” 或“已使用”。

  • 文件页(缓存页):有存储器中的文件(例如代码或内存映射文件)支持的内存。也即 File-backed Page,从名字理解,就是在磁盘上有文件对应的页,包括缓存、缓冲以及通过内存映射获得的页;

         缓存内存有两种类型:

  •         私有页:由一个进程拥有且未共享;
  •                  干净页:存储器中未经修改的文件副本,可由 kswapd 删除以增加可用内存;
  •                 脏页:存储器中经过修改的文件副本;可由 kswapd 移动到 zRAM 或在 zRAM 中进行压缩以增加可用内存;
  •         共享页:由多个进程使用;
  •                 干净页:存储器中未经修改的文件副本,可由 kswapd 删除以增加可用内存;
  •                脏页:存储器中经过修改的文件副本;允许通过 kswapd 或者通过明确使用 msync()或 munmap() 将更改写回存储器中的文件,以增加可用空间;

当文件页被修改过后,并且暂时还没写将数据写入磁盘,页中的数据与磁盘不一致,这样的页就是脏页。在回收前,需要先回写到磁盘。

  •  匿名页:没有存储器中的文件支持的内存(例如,由设置了 MAP_ANONYMOUS 标记的 mmap() 进行分配);
    •   脏页:可由 kswapd 移动到 zRAM/在 zRAM 中进行压缩以增加可用内存;

文件页和匿名页_SEVENTHD7的博客-CSDN博客_匿名页 文件页

(1)对于文件页,因为有磁盘文件对应,回收的时候可以直接释放掉,但下次再使用的时候又要从磁盘读入,会产生 IO。
(2)对于匿名页,回收是将其 swpa out 到 swap 分区中,也就是将其压缩存放,在下次使用时,只需要进行解压,swap in 回内存空间。

2、Linux 内核设有可用内存上下限阈值。当可用内存降至下限阈值以下时,kswapd 开始回收内存页。当可用内存达到上限阈值时,kswa

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值