android zram 命令,Android 内存管理

本文深入探讨Android内存管理,包括虚拟内存的分页和内存映射,以及内存不足时如何利用kswapd和LowMemoryKiller(LMK)处理。Android使用zRAM作为内存交换区,当内存不足时,LMK会根据内存阈值杀掉低优先级进程。文章还介绍了Android堆空间的划分和Dalvik/ART虚拟机的内存管理策略。
摘要由CSDN通过智能技术生成

概述

虚拟内存

2.1 分页

2.2 内存映射

内存不足时的处理

3.1 kswapd

3.2 LMK

虚拟机

4.1 堆空间划分

4.2 回收算法

在看这篇文章之前,需要Linux内存管理基础,推荐Linux 内存管理

对于这篇文章的结构我也是思虑再三,为什么先讲LMK,后讲虚拟机回收,主要是因为,分页、内存映射、LMK是直接影响物理内存的,而虚拟机对应的更多的是硬件无关的。此外,本篇不涉及具体代码实现,详细实现以后再补。

概述

ae4c6b497e51

Android 使用的是Linux内核,但是这个Linux内核是根据Android所需,在文件系统、内存管理、进程间通信机制和电源管理方面等方面进行了修改了的,继承了Linux内核的诸多优点,保留了Linux内核的主题框架,同时能够更好的工作在移动设备上。

Android同样使用分页和内存映射来构建虚拟内存,同时使用垃圾回收器来回收内存,使用LowMemoryKiller(LMK)在低内存的时候来杀死进程释放更多内存。

值得注意的是,应用修改的任何内存,无论修改的方式是分配新对象还是轻触内存映射的页面,都会一直驻留在 RAM 中,并且不会换出到磁盘。

每一个应用都是一个独立的虚拟机,以一个Linux进程的形式存在,在Android上,4.4之前都是Dalvik虚拟机,5.0之后默认都是ART虚拟机了,对于垃圾回收机制,Android ART虚拟机默认使用CMS来清理回收对象。

对于回收进程资源这回事,Linux在进程退出的时候,就会释放当前Linux的内存,但是Android为了提高的切换进程时的启动速度,会将这些进程都保存在内存中,知道系统需要更多的内存为止。LMK每个一段时间都会检查一次,当内存值较低的时候,LMK就会根据不同的剩余内存档位来来选择杀不同优先级的进程。其实在Linux也有类似的管理策略,即OOM killer,全称(Out Of Memory Killer), OOM的策略更多的是用于分配内存不足时触发,得分最高的进程杀掉。当需要OOM killer处理的时候,系统可能已经处于异常状态,而Android更像是在未雨绸缪。

虚拟内存

分页

分页的Linux很多具体实现我们已经聊过,既然Android是从Linux开始改的,那么很多其实都是一样的,这里着重介绍一下他不同的地方。

首先,Android的内存形式被分为三种:RAM、zRAM 和存储器。

ae4c6b497e51

RAM 就是我们常说的物理内存,是最快的内存类型,但其大小通常有限。

zRAM 是从RAM开辟出来的一块区域,是用于交换空间的 RAM 分区。所有数据在放入 zRAM 时都会进行压缩,然后在从 zRAM 向外复制时进行解压缩。这部分 RAM 会随着页面进出 zRAM 而增大或缩小。设备制造商可以设置 zRAM 大小上限。

存储器,这一部分就是我们常说的磁盘,存储器中包含所有持久性数据(例如文件系统等),以及为所有应用、库和平台添加的对象代码,存储器比另外两种内存的容量大得多。

在 Android 上,存储器不像在其他 Linux 实现上那样用于交换空间,因为频繁写入会导致这种内存出现损坏,并缩短存储媒介的使用寿命,而是所有内存都是一直驻留RAM中。只是在实现分页的时候,需要一块辅村来做担保,Linux选择了磁盘,Android选择了压缩+RAM。这部分跟Linux大同小异,所以就不展开叙述,Linux参考这里.

ae4c6b497e51

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

缓存页:在储存器中有对应文件的内存,例如,代码或内存映射文件。缓存页也分为两种:

干净页(clean):存储器中未经修改的文件副本,可由 kswapd删除以增加可用内存

脏页(dirty):存储器中已经被修改的文件副本,可由 kswapd 移动到 zRAM 中进行压缩储存

共享页:由多个进程共享使用的页面

干净页:存储器中未经修改的文件副本,可由 kswapd 删除以增加可用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值