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

Android内存管理机制
假设你先开了QQ,然后跟妹子A聊天,然后你按了HOME键,又开了威信和妹纸B聊天,假设这时候系统基本没有内存了,又按了HOME键想打开UC看看苍老师的微博。Android会怎么干哪?他发现QQ最先到后台,就把QQ给干掉了。玩了会UC,你又要跟妹纸A聊天,这时候android发现又没有内存了,发现威信半天没用了,就把威信给干掉,然后给QQ用。问题来了,你本来想多任务,结果只能同时用两个程序,打开第三个如果内存不够就要干掉之前的。但是你期望的是我如果没有把他退出去,我希望下次再打开QQ的时候还是在给妹纸A聊天的界面。

ZARM SWAP解决方案:
SWAP最开始的方案就是专门从flash上分出一块区域,每次如果内存不够不是吧程序给干掉,而是把程序占用内存的数据复制到SWAP分区,等切换回来的时候就直接把这部分复制到内存里,这样程序直接就恢复到之前的状态,譬如QQ上与妹纸A聊天的界面。这样你就感觉程序还是以前的样子,没有被系统干掉。但是flash寿命有限一般10w次左右,这样频繁读写很快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 个程序, 这就是差别。



ZRAM SWAP 优点

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

ZRAM SWAP 缺点:

  • 如果在大内存的设备上使用,不仅不会快,反倒因为不断复制内存并且CPU反复压缩解压内从而拖慢速度。