常常听到身边用安卓的朋友抱怨手机卡顿,内存动不动就快没了。而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下小内存下的生存之道的更多相关文章

  1. 小东和三个朋友一起在楼上抛小球,他们站在楼房的不同层,假设小东站的楼层距离地面N米,球从他手里自由落下,每次落地后反跳回上次下落高度的一半,并以此类推知道全部落到地面不跳,求4个小球一共经过了多少米?(数字都为整数) 给定四个整数A,B,C,D,请返回所求结果。

    include #include<vector> using namespace std; class Balls { public: int calcDistance(int A, in ...

  2. java问题排查总结

    前些天发现:http://hellojava.info/这个站点,关于java问题排查分析总结线上故障总结其实是最有价值的,好的总结就是一个系统演进历史,是团队难得的积累沉淀. 花了不少时间看了下,顺 ...

  3. 第三次个人作业——关于K米(Andorid)的案例分析

    第三次个人作业--关于K米(Andorid)的案例分析 1.K米简介 官方网址:http://www.ktvme.com/ 2.评测 2.1.上手体验 带着找bug的心态,兴致勃勃地开始体验 K米.打 ...

  4. CI(codeigniter)框架,routes.php设置正确,但是显示服务器错误,是__construct少写了一个下划线

    今天弄了一下CI框架,大概看了一下文档,感觉CI框架非常精简,但是在做的时候遇到了问题,CI文档中提供了一个新闻系统的例子,所有工作都做完了,在浏览器中打开相对应的url是,却显示“服务器错误”,一点 ...

  5. 为什么国外的 App 很少会有开屏广告?

    前言: 笔者在知乎看到这个问题,觉得这的确是一个值得关注和回答的现象,遂写了回答并整理成本文发布在此抛砖引玉,欢迎讨论. 正文: 古话说得好,先问是不是,再问为什么. 对于「国外的 App 很少有开屏 ...

  6. SQLite占用资源少原因

    本篇承接上篇SQLite详解的下篇,介绍SQLIte为什么占用资源少的原因?本文主要参考https://blog.csdn.net/hanyingzhong/article/details/46400 ...

  7. JsonFormat 日期少了8个小时?还我

    JsonFormat 后日期少了8个小时什么鬼? 前言 今天测试的时候发现时间对不上,比数据库里的时间少了8个小时?测试小姐姐一顿狂轰乱炸,一点都不温柔. 什么鬼?哪里出了问题?数据库显示的是下面

  8. C++高并发场景下读多写少的解决方案

    C++高并发场景下读多写少的解决方案 概述 一谈到高并发的解决方案,往往能想到模块水平拆分.数据库读写分离.分库分表,加缓存.加mq等,这些都是从系统架构上解决.单模块作为系统的组成单元,其性能好坏也 ...

  9. C++高并发场景下读多写少的优化方案

    概述 一谈到高并发的优化方案,往往能想到模块水平拆分.数据库读写分离.分库分表,加缓存.加mq等,这些都是从系统架构上解决.单模块作为系统的组成单元,其性能好坏也能很大的影响整体性能,本文从单模块下读 ...

随机推荐

  1. 【codeforces 234F】Fence

    [题目链接]:http://codeforces.com/problemset/problem/234/F [题意] 你有n块板要凃油漆; 然后每块板有高度h[i];(宽度都为1) 然后每块板只能凃同 ...

  2. [terry笔记]一个在线美化sql的网站

    http://www.dpriver.com/pp/sqlformat.htm 甚是好用.

  3. springmvc 异常Interceptor

    无论做什么项目,进行异常处理都是非常有必要的,而且你不能把一些只有程序员才能看懂的错误代码抛给用户去看,所以这时候进行统一的异常处理,展现一个比较友好的错误页面就显得很有必要了. springMVC提 ...

  4. oracle学习之第一个存储过程:打印Hello World

    数据库对象:表.视图.索引.序列.同义词.存储过程.存储函数 存储过程:指的是存储在数据库中供全部用户程序调用的子程序叫存储过程.存储函数 存储过程和存储函数的同样点:完毕特定功能的程序 存储过程和存 ...

  5. C++ Primer Plus的若干收获--(九)

    这篇博文我接着上一篇来写,相同讲一些关于类的一些基础知识. 本篇将会继续使用上篇的股票类STock,这里给出接口 ifndef STOCKOO_H_ #define STOCKOO_H_ #inclu ...

  6. MongoDB 数据库下载和安装

    MongoDB是一款非常流行的非关系型数据库,将面向对象数据存储做的非常好.这里就不具体介绍它的使用,本文主要解说怎样安装MongoDB数据库.把自己安装过程中碰到的问题和最后解决方法分享给大家,希望 ...

  7. Extjs4.2 ajax请求url中传中文參数乱码问题

    今天有个需求须要在url中传入中文參数.结果在后台取得时出现乱码,怀疑可能是编码问题.上网查询了资料,试了几种办法.发现有一种可行,记录在此,以便查阅. url中用encodeURI 进行2次编码: ...

  8. 外面的wifi非常精彩,外面的wifi非常不安

    星期一果然非常忙,看到安卓漏洞还是午休的时候.可能我们都习惯了.我们的信息安全一向难以得到保障.对于我来说,可能都无所谓了.可是作为用户之中的一个,我们也不能太安分,该须要的保障还是得维护. 本来.我 ...

  9. nyoj--1087--摆方格(规律)

    摆方格 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 给你一个n*n的方格,每个方格里的数必须连续摆放如 1 2 4 3 ,下图为不连续的,请输出从左上角到右下角的对角 ...

  10. sts安装出现could not find jar:file解决办法,could not find jar:file,sts安装

    标题sts插件下载好但是安装出错 我的eclipse是4.5.2,在官方网站https://spring.io/tools3/sts/legacy下载,压缩包的名字为:spring-tool-suit ...