其实这项技术好几年前我就看到了,那个时候就有把存储空间用来当虚拟内存(2-3G),虚拟内存主要还是用来存放应用缓存的,这样可以减少物理内存压力和CPU耗电
什么是虚拟内存?
虚拟内存是计算机系统内存管理的一种技术。
虚拟内存别称虚拟存储器(Virtual Memory)。电脑中所运行的程序均需经由内存执行,若执行的程序占用内存很大或很多,则会导致内存消耗殆尽。为解决该问题,Windows中运用了虚拟内存技术,即匀出一部分硬盘空间来充当内存使用。当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。若计算机运行程序或操作所需的随机存储器(RAM)不足时,则 Windows 会用虚拟存储器进行补偿。它将计算机的RAM和硬盘上的临时空间组合。当RAM运行速率缓慢时,它便将数据从RAM移动到称为“分页文件”的空间中。将数据移入分页文件可释放RAM,以便完成工作。 一般而言,计算机的RAM容量越大,程序运行得越快。若计算机的速率由于RAM可用空间匮乏而减缓,则可尝试通过增加虚拟内存来进行补偿。其实早在好多年前,安卓就采用了这种技术。但是,从RAM读取数据的速率要比从硬盘读取数据的速率快。
ZRAM和SWAP的区别在哪?
ZRAM(压缩内存) ZRAM是linux的一种内存优化技术,基本工作原理是:通过划定一片区域,将压缩过后的硬盘数据放到zram里,打开解压出来,以实现高速读取,会增加CPU负担,对于现在高端CPU来说,问题不大,如果是低端CPU的话,不建议你开,反而更卡,导致CPU耗电过高。
Android里面普遍使用了zRAM技术,由于zRAM牺牲了CPU时间,所以交换次数还是越少越好。像Android和windows,内存越大越好,因为发生交换的几率就小。这样两个进程相互切换(如微博和微信)时就会变得流畅,因为内存足够的话,后台进程无需被换进swap分区或被OOM杀掉。
磁盘 swap:是把磁盘的一部分作为内存, 对应用来说完全是透明的,相当与增大了内存, 但是缺点很明显, 当用到swap的时候,速度决定于闪存规格,比如说ufs2.0/2.1/3.0/3.1等等,但是速度差距和内存相差太大了。
所以,当内存使用存在压力,开始触发内存回收的行为时,就可能会使用swap空间。内核对swap的使用实际上是跟内存回收行为紧密结合的。
安卓手机有必要开zram吗?
如果你的可用运行内存实在是太小,且CPU性能不是太低端(zRAM会消耗CPU资源),那么zRAM还是有必要开。
swappiness到底是用来调节什么的?
很多人应该都知道 /proc/sys/vm/swappiness 这个文件,是个可以用来调整跟swap相关的参数。这个文件的默认值是60,可以的取值范围是0-100。
这很容易给大家一个暗示:我是个百分比哦!
这个文件的值用来定义内核使用swap的积极程度:
值越高,内核就会越积极的使用swap;
值越低,就会降低对swap的使用积极性。
如果这个值为0,那么内存在free和file-backed使用的页面总量小于高水位标记(high water mark)之前,不会发生交换。
kswapd什么时候会进行swap操作?
我们回到kswapd周期检查和直接内存回收的两种内存回收机制。
直接内存回收比较好理解,当申请的内存大于剩余内存的时候,就会触发直接回收。
那么kswapd进程在周期检查的时候触发回收的条件是什么呢?
还是从设计角度来看,kswapd进程要周期对内存进行检测,达到一定阈值的时候开始进行内存回收。
这个所谓的阈值可以理解为内存目前的使用压力,就是说,虽然我们还有剩余内存,但是当剩余内存比较小的时候,就是内存压力较大的时候,就应该开始试图回收些内存了,这样才能保证系统尽可能的有足够的内存给突发的内存申请所使用。
最后总结手机运行内存扩展有必要吗?
开,主要有一些应用基本现在走缓存了,可以减少CPU和提高流程度,打开应用冷却时间缩短了,但是建议3-4g就足够了,多余的浪费,没必要。