码迷,mamicode.com
首页 > 移动开发 > 详细

巧妇能为少米之炊(1)——Android下小内存下的生存之道

时间:2014-09-03 18:10:57      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:lkm zram ksm   android 编程   

经常听到身边用安卓的朋友抱怨手机卡顿,内存动不动就快没了,而Google声称在512M的内存下也能流畅运行Android 4.4,到底它做了什么?

总结一下它主要做了四件事:

1.优化内核,使用ActivityManager来减少直接内存回收

2.优化LMK(low memory killer)的临界值

3.使能KSM(Kernel Samepage Merging)

4.使能ZRAM代替SWAP分区

这几个事情,个人只有第三和第四件事情看起来比较靠谱。


 优化内核的事情:

摘自Google官方网站的英文介绍,翻译过来的意思大概是: 修改临界值,减少直接内存回收,因为直接内存回收会需要额外的IO操作,耗时较大,利用空闲的时间增加后台回收

众所周知,对EMMC读写的时候,是非常耗费时间的,因为内存的读写速度要高出EMMC读写速度几个量级,因此减少与EMMC交互的确可以节省很多时间,减少卡顿,但是每个人的使用习惯不同,怎么要修改算法使得减少直接内存回收呢?我不知道,但是我觉得这个优化等于说废话,到底咋样,使用过后才知道。


关于LMK:

Linux内核中,用OOM来回收内存,即当内存不够的时候,调用一种算法,把那些不用的,优先级别比较低的,都给释放掉,这样腾出一部分内存,于是内存就变大了,而Android中,对这个OOM机制做了一个优化,它就叫LMK。

它认为,如果等到OOM发生的时候,内存已经非常不足了,这个时候再去释放内存,系统的响应时间会变的非常长,造成非常差的用户体验,于是LMK做了一个改变,定时检查空闲内存,当少于某个伐值的时候,就杀掉一些进程,腾出一些空间,这样保证系统中一直有较大的空闲内存,可以减少卡顿。有道理,后面的章节中会仔细讲诉LMK。


KSM:

这个东西早在2009年的时候就出来了,但是反映比较平淡,原因是:KSM合并相同页面,即合并副本内存,可以节省不必要的内存,但而采用此方法,会增加耗电量,不得已的时候才会打开。


什么是ZRAM:

说的明白一点,ZRAM就是SWAP的一个改进,一般发生SWAP的时候,是把要置换出去的数据存到外部磁盘上(手机就是EMMC,电脑就是硬盘),这样会降低效率,于是聪明的开发者们相处一个方法,那就是把要置换出去的东西压缩还放在内存中,这样消耗的只是解压时间,而这个时间远远小于与外部磁盘交互所消耗的时间。是个比较靠谱的方式,下面的章节中,将详细讲诉它的调用过程以及如何打开。


于是LMK,KSM和ZRAM是笔者认为比较靠谱的方式,下面的几个章节,将分别讲诉他们如何被使能,以及具体的调用过程和原理。

巧妇能为少米之炊(1)——Android下小内存下的生存之道

标签:lkm zram ksm   android 编程   

原文地址:http://blog.csdn.net/memoryjs/article/details/39029995

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!