[ZRAM]SWAP内存管理讲解

RAM:内存
SWAP:Linux交换区
Flash:你可以想象为电脑硬盘。
Linux:Android本身可以理解为Linux操作系统和Windows操作系统一样。

Android内存管理机制

假设你先开了QQ,然后跟妹子A聊天,然后你按了HOME键,又开了微信和妹纸B聊天,假设这时候系统基本没有内存了,又按了HOME键想打开UC看看苍老师的微博。Android会怎么干哪?他发现QQ最先到后台,就把QQ给干掉了。玩了会UC,你又要跟妹纸A聊天,这时候Android发现又没有内存了,发现微信半天没用了,就把微信给干掉,然后给QQ用。

问题来了,你本来想多任务,结果只能同时用两个程序,打开第三个如果内存不够就要干掉之前的,但你期望的是下次再打开QQ的时候还是在给妹纸A聊天的界面
小米的“ZRAM”
(MIUI开发者选项里的系统内存优化其实就是ZRAM)

ZARM SWAP解决方案:

SWAP最开始的方案就是专门从Flash上分出一块区域,每次如果内存不够不是把程序给干掉,而是把程序占用内存的数据复制到SWAP分区,等切换回来的时候就直接把这部分复制到内存里,这样程序直接就恢复到之前的状态,譬如QQ上与妹纸A聊天的界面。这样你就感觉程序还是以前的样子,没有被系统干掉。

但是Flash寿命有限一般10万次左右,这样频繁读写很快Flash就挂了。于是攻城狮就想到了另外一个办法,把内存划分一部分拿出来当SWAP用,但是羊毛出在羊身上,原来你QQ占用50M内存,你又把他复制到SWAP里面还是50M,SWAP还是占用的内从,等于说一点都没减少内从使用,所以就有了ZRAM SWAP。

攻城狮怎么干的呢?比如你QQ占用50M内存,他把他压缩到20M然后再放到SWAP里面,这样SWAP里面机可以放更多不用的程序,就可以释放更多的内存给新的程序用,于是你就发现多任务切换终于利索了。这就是ZRAM SWAP。

举例说明:

总内存:600M= 600M(SWAP) +300 (活动内存)
每个程序占用30M,压缩后是10M。

没有ZRAM SWAP 方案:

你可以同时打开 20 个程序 600/30 = 20

有ZRAM SWAP方案:

SWAP 里面可以保存 300/10 = 30
活动内存里可以运行  300/30 = 10
总共你可以同时运行 40 个程序, 这就是差别。

ZARM SWAP 优点:
可以让小内存的设备在多任务的情况下切换自如,提高用户体验。

ZARM SWAP 缺点:
如果在大内存的设备上使用,不仅不会快,反倒因为不断复制压缩解压内存从而拖慢速度,增加耗电。

标签: Android Linux


已有 4 条评论
  1. Melody Melody

    零件用的压缩算法是LZ4还是LZO

  2. Love4Taylor Love4Taylor

    MIUI用的压缩算法是LZ4还是LZO

    1. 不清楚,没细研究过

添加新评论