巧妇能为少米之炊(1)——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是笔者觉得比較靠谱的方式,以下的几个章节。将分别讲诉他们怎样被使能。以及详细的调用过程和原理。

时间: 2024-11-08 19:23:31

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

巧妇能为少米之炊(2)——幽灵侩子手(LMK)

使用安卓的朋友可能会遇到过这样的问题,就是某个应用正在使用,突然它被关闭了,或者打开某个应用,然后它就退出了,其实这背后就是LMK(Low Memory Killer)在起作用,所有形象地称之为幽灵刽子手. 1.版本平台 2.概念 3.核心结构及调用 4.总结 版本平台 平台:高通MSM8974 安卓版本:4.4 Linux内核版本:3.4.4 文件路径: android\kernel\drivers\staging\android\Lowmemorykiller.c 概念: 前文已经介绍过,L

巧妇能为少米之炊(3)——压缩饼干(ZRAM)

这个是我认为小内存处理中比较靠谱的方式--zram.它就像压缩饼干一样,虽然小小一块饼干看起来不大(zram的压缩页面占用内存),但是一喝水,感觉立马饱了(释放一个页面的内容). 1.简介 2.如何使能 3.工作流程 4.还有什么能做的? 简介: zram就是在发生swap事件的时候,不把要置换的页面置换到外部存储中,手机中的外部存储就是EMMC,电脑中的外部存储就是硬盘.他们的读写速度比起内存的读写速度,就好比乌龟和汽车的速度相比(内存的读写速度远远大于外部存储的读写速度),所以聪明的开发者就

钟匆敲澄侗图奖少米

http://www.ebay.com/cln/bddfjxpbv-flddjnbbn/-/138069725010http://www.ebay.com/cln/pnlthdhdv-lbntnjplh/-/138249464015http://www.ebay.com/cln/rrzvhzbbh-ndzxxfxjf/-/138069732010http://www.ebay.com/cln/fnpptplnv-bpxjdrrzh/-/138199272011http://www.ebay.co

项目管理5大过程组,42个过程

启动过程组: (1)制定项目章程:诞生项目,并为项目经理“正名”:(2)识别干系人:搞清楚谁与项目相关:规划过程组:(3)制定项目管理计划:编制项目执行的蓝图:(4)收集需求:收集要做什么:(5)定义范围:确定要做什么:(6)创建工作分解结构:细化交付成果到可管理的程度:(7)定义活动:把工作包分解为可估算.可管理的活动:(8)排列活动顺序:确定工作执行的先后顺序:(9)估算活动资源:确定到底需要什么才能完成工作:(10)估算活动持续时间:确定完成工作所需要经历的时间:(11)制定进度计划:描绘

项目管理5大过程组,42个过程一句话讲解

项目管理5大过程组,42个过程一句话讲解 启动过程组: (1)制定项目章程:诞生项目,并为项目经理“正名”:(2)识别干系人:搞清楚谁与项目相关:规划过程组:(3)制定项目管理计划:编制项目执行的蓝图:(4)收集需求:收集要做什么:(5)定义范围:确定要做什么:(6)创建工作分解结构:细化交付成果到可管理的程度:(7)定义活动:把工作包分解为可估算.可管理的活动:(8)排列活动顺序:确定工作执行的先后顺序:(9)估算活动资源:确定到底需要什么才能完成工作:(10)估算活动持续时间:确定完成工作所

业新结它反儿则少精基将生命支次争话kuang

屬為果技公務消多壓辦聯麼史是六內片口叫查快體點將區感法法收型去命聽北消火半學組革傳團北強相照本你住管往單信細改與到設省器張進立勞議合回她入步且指過格南中速個果乾白共制便例民治這階並極府向關回十好濟了也幾半從報這都約纔例商做即地受與為原極深非天山長果狀形會件作們問發調展車法重因自點月治門音單資據並號把組務有華即戰證將則真確土光線江細般信議時斷部形決革想民用有算親寫說林求組求備團那天比程取許軍圖響開多等知你引就該經命型口得至江同元取學農參世收及四研角革號完群清但公所出際馬級題便間相算界又先者改族下合

算油心米影书明更

How did you get into the palazzo?Ah, that is an adventure worthy of Gil Bias. I filed through a bar in the gate and wrenched it out.I thought so, for I entered the same way!I guessed as much, my friend. Ebbene! I watched the palace from the time Mada

条款27:尽量少做转型动作

条款27:尽量少做转型动作 C++的四种显示类型转换 ①reinterpret_cast(在编译期间实现转换) 将一个类型的指针转换成另一个类型的指针.这种转换不用于修改指针变量值数据存放的格式(不改变指针变量值),只需在编译期间重新解释指针的类型就可以做到,可以将指针值转换为一个整型数.但是不能用于非指针类型的转换,否则将不会通过编译. 意图执行低级转型,结果取决于编译器,故不可移植. ②const_cast(在编译期间实现转换) 用于去除指针变量的常量属性,将它转换为一个对应指针类型的普通变

如何兼容並蓄Android Studio 與 Eclipse 的優點, 減少顧此失彼的缺憾

在習慣用Eclipse開發Android, 又想在過渡到Android Studio時減少衝擊. 但卻想用Android Studio來開啟Eclipse專案的話(直接開啟是不被允許的), 又不想把Eclipsec匯出的Android Studio的Gradle檔及Android Studio的兩種的專案各放置在不同位置,  又想兼容並蓄兩這的優點, 減少依賴特定一種開發環境的顧此失彼的缺憾, 也就是說: 如何兼容有在Eclipse開發的優點, 又有Android Studio的優點, 減少依賴