常常听到身边用安卓的朋友抱怨手机卡顿,内存动不动就快没了。而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. IBASE4J开发环境搭建

    1.修改STS默认编码,Window > Perference > General > Workspace,将 text file encoding 设置为 UTF-8 2.打开 G ...

  2. yqj2065经典语录

    在上课时.博客中和<编程导论(Java)>书中,yqj2065说过一些简短的话.列举一些玩玩. 假设您在我的博客中看见好玩的,最好还是推荐一下. 持续加入中... 1. "噢姐姐 ...

  3. swift算法手记-7

    @IBAction func compute(sender: AnyObject) { // 19*x^7-31*x^5+16*x^2+7*x-90=0 // newton迭代法求一元方程的解,最大求 ...

  4. Android 开发之集成百度地图的定位与地图展示

    app 应用中,大多数应用都具有定位功能,百度定位就成了开发人员的集成定位功能的首选,近期也在做定位功能,可是发现百度真是个大坑啊, sdk 命名更新了,相关代码却不更新,害得我花费了非常长时间来研究 ...

  5. nyoj--983--首尾相连数组的最大子数组和(动态规划)

    首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是 ...

  6. COGS 2479 奇怪的姿势卡♂过去 (bitset+折半)

    思路: 此题显然是CDQ套CDQ套树套树 (然而我懒) 想用一种奇怪的姿势卡过去 就出现了以下解法 5w*5w/8的bitset hiahiahia 但是空间会爆怎么办啊- 折半~ 变成5w*2.5w ...

  7. mybatis的sql中字段两种映射(映射到实体)方式

    mybatis的xml配置文件中,字段映射的两种方式: 1.resultMap标签中将数据库的字段与实体类中的字段对应: <resultMap id="BaseResultMap&qu ...

  8. Combobox下拉框两级联动

    下拉框的两级联动是我们开发中经常遇到一种情况.比如一个学生管理系统中,根据年级.科目及姓名查询学生考试成绩,年级和科目都是硬盘中的有限数据(数据库)而学生则可以有用户手动指定,这时在数据库中有年级和科 ...

  9. HTML的常用标签属性及使用时需注意的一些细节

    前言 本篇随笔的主要是复习一下常用的一些HTML(Hyper Text Markup Language)标签及其属性,并总结一些使用过程中需要注意的一些细节,本篇提及的常用标签主要有: iframe标 ...

  10. Mac 如何修改Mac系统的默认截图路径

    step 1 :打在桌面或者其他任意位置创建一个文件夹:截图图库.我创建的路径是:/Users/yilin/Documents/截图图库(仅供参考) step 2:打开终端,输入以下命令:defaul ...