巧妇能为少米之炊(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是笔者觉得比較靠谱的方式,以下的几个章节。将分别讲诉他们怎样被使能。以及详细的调用过程和原理。
巧妇能为少米之炊(1)——Android下小内存下的生存之道的更多相关文章
- 小东和三个朋友一起在楼上抛小球,他们站在楼房的不同层,假设小东站的楼层距离地面N米,球从他手里自由落下,每次落地后反跳回上次下落高度的一半,并以此类推知道全部落到地面不跳,求4个小球一共经过了多少米?(数字都为整数) 给定四个整数A,B,C,D,请返回所求结果。
include #include<vector> using namespace std; class Balls { public: int calcDistance(int A, in ...
- java问题排查总结
前些天发现:http://hellojava.info/这个站点,关于java问题排查分析总结线上故障总结其实是最有价值的,好的总结就是一个系统演进历史,是团队难得的积累沉淀. 花了不少时间看了下,顺 ...
- 第三次个人作业——关于K米(Andorid)的案例分析
第三次个人作业--关于K米(Andorid)的案例分析 1.K米简介 官方网址:http://www.ktvme.com/ 2.评测 2.1.上手体验 带着找bug的心态,兴致勃勃地开始体验 K米.打 ...
- CI(codeigniter)框架,routes.php设置正确,但是显示服务器错误,是__construct少写了一个下划线
今天弄了一下CI框架,大概看了一下文档,感觉CI框架非常精简,但是在做的时候遇到了问题,CI文档中提供了一个新闻系统的例子,所有工作都做完了,在浏览器中打开相对应的url是,却显示“服务器错误”,一点 ...
- 为什么国外的 App 很少会有开屏广告?
前言: 笔者在知乎看到这个问题,觉得这的确是一个值得关注和回答的现象,遂写了回答并整理成本文发布在此抛砖引玉,欢迎讨论. 正文: 古话说得好,先问是不是,再问为什么. 对于「国外的 App 很少有开屏 ...
- SQLite占用资源少原因
本篇承接上篇SQLite详解的下篇,介绍SQLIte为什么占用资源少的原因?本文主要参考https://blog.csdn.net/hanyingzhong/article/details/46400 ...
- JsonFormat 日期少了8个小时?还我
JsonFormat 后日期少了8个小时什么鬼? 前言 今天测试的时候发现时间对不上,比数据库里的时间少了8个小时?测试小姐姐一顿狂轰乱炸,一点都不温柔. 什么鬼?哪里出了问题?数据库显示的是下面
- C++高并发场景下读多写少的解决方案
C++高并发场景下读多写少的解决方案 概述 一谈到高并发的解决方案,往往能想到模块水平拆分.数据库读写分离.分库分表,加缓存.加mq等,这些都是从系统架构上解决.单模块作为系统的组成单元,其性能好坏也 ...
- C++高并发场景下读多写少的优化方案
概述 一谈到高并发的优化方案,往往能想到模块水平拆分.数据库读写分离.分库分表,加缓存.加mq等,这些都是从系统架构上解决.单模块作为系统的组成单元,其性能好坏也能很大的影响整体性能,本文从单模块下读 ...
随机推荐
- 洛谷—— P1640 [SCOI2010]连续攻击游戏
https://www.luogu.org/problem/show?pid=1640 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1, ...
- HDU 4312 Contest 2
题目要求两点间的最大值作为距离即: 即是切比雪夫距离.而切比雪夫距离与曼哈顿距离的转换却很巧妙. 把平面坐标所有点绕原点逆向旋转45度后,所得点的曼哈顿距离之和除以√2,即是切雪比夫距离.旋转点的公式 ...
- HDU 3240
求卡特兰数前N项的和模M. 直接求必定是不可能的,卡特兰数太大了.想了好久,本打算把位数拆成素数相乘,然后记录下各素数的个数计算.可惜,TLE....因为N太大了. 除法必定是要用到逆元的,但分母与M ...
- 树莓派学习笔记—— 源码方式安装opencv
0.前言 本文介绍怎样在树莓派中通过编译源码的方式安装opencv,并通过一个简单的样例说明怎样使用opencv. 很多其它内容请參考--[树莓派学习笔记--索引博文] 1.下载若干依 ...
- poj - 1050 - To the Max(dp)
题意:一个N * N的矩阵,求子矩阵的最大和(N <= 100, -127 <= 矩阵元素 <= 127). 题目链接:http://poj.org/problem?id=1050 ...
- Oracle_角色_权限具体说明
一.Oracle内置角色connect与resource的权限 grant connect,resource to user; CONNECT角色: --是授予终于用户的典型权利,最主要的 ALT ...
- android选择图片或拍照图片上传到server(包含上传參数)
在9ria论坛看到的.还没測试,先Mark与大家分享一下. 近期要搞一个项目,须要上传相冊和拍照的图片.不负所望,最终完毕了! 只是须要说明一下,事实上网上非常多教程拍照的图片.都是缩略图不是非常清晰 ...
- ORACLE 11g RAC-RAC DG Duplicate 搭建(生产操作文档)
环境:rhel 6.7 64位源库:ORACLE 11204 RAC 未打PSU备库:ORACLE 11204 RAC PSU 20170718 一.停止中间件并做全库备份 1.在节点2做全备 2.首 ...
- sicily 1342 开心的金明 (动规)
刷一下简单的背包问题 以下为代码: //1342. 开心的金明 #include <iostream> using namespace std; #define MAX(a,b) a> ...
- C++线程传参数
struct TThreadParam { LPVOID pThis; int visionIndex; }; class CMilTestDlg : public CDialog { // Cons ...