1Android系统是基于Linux 2.6内核开发的开源操作系统,而linux系统的内存管理有其独特的动态存储管理机制。不过Android系统对Linux的内存管理机制进行了优化,Linux系统会在进程活动停止后就结束该进程,而Android把这些进程都保留在内存中,直到系统需要更多内存为止。这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度。

2AndroidLow Memory killer是在标准的linux kernelOOM基础上修改而来的一种内存管理机制,当系统内存不足时,杀死Bad进程释放其内存,Bad进行的选择标准有2个:oom_adj和占用内存的大小,oom_adj代表进程的优先级,数值越大,优先级越高,对应每个oom_adj都有一个空闲内存的阀值。系统会对进程的重要性进行评估,并将重要性以“oom_adj”这个数值表示出来,赋予各个进程。Android Kernel每隔一段时间会检查当前内存是否低于某个阀值,如果是,则杀死oom_adj最大的Bad进程,如果有2个以上的Bad进程oom_adj相同,则杀死其中占用内存最多的进行

(3)Android将程序的重要性分成以下几类,按照重要性依次降低的顺序:

名称 oom_adj 解释
FOREGROUD_APP 0
前台程序,可以理解为你正在使用的程序
VISIBLE_APP 1
用户可见的程序
SECONDARY_SERVER 2
后台服务,比如说QQ会在后台运行服务
HOME_APP 4 HOME
,就是主界面
HIDDEN_APP 7
被隐藏的程序
CONTENT_PROVIDER 14
内容提供者,
EMPTY_APP 15
空程序,既不提供服务,也不提供内容
其中每个程序都会有oom_adj值,这个值越小,程序越重要,被杀的可能性越低。

(4)
除了上述程序重要性分类之外,Android系统还维护着另外张表,这张表是个对应关系,以N1为例:
oom_adj
内存警戒值( 4K为单位)
0 1536
1 2048
2 4096
7 5120
14 5632
15 6144
这个表是定义了个对应关系,每个警戒值对应了个重要性值,当系统的可用内存低于某个警戒值时,就杀掉所有大于该警戒值对应的重要性值的程序。比如说,当可用内存小于6144 * 4K = 24MB时,开始杀所有的EMPTY_APP,当可用内存小于5632 * 4K = 22MB时,开始杀所有的CONTENT_PROVIDEREMPTY_APP

(5) alter minfree改的是什么呢,上面这张对应表是由两个文件组成的:
/sys/module/lowmemorykiller/parameters/adj
/sys/module/lowmemorykiller/parameters/minfree

alter minfreee
就是修改/sys/module/lowmemorykiller/parameters/minfree这个文件的,举例来说,如果把最后项改为

更多相关文章

  1. 专项测试(三)内存泄漏调试经验分享 (一)
  2. Android的内存泄露测试 mat
  3. Android安全机制介绍
  4. Android中native进程内存泄露的调试技巧
  5. Android(安卓)内存管理机制
  6. Android(安卓)匿名共享内存C接口分析
  7. Android中App可分配内存的大小
  8. Android(安卓)Weak Handler:可以避免内存泄漏的Handler库
  9. Android需要大量内存时自己设置堆大小

随机推荐

  1. Android7.0 MTK方案 静默安装和卸载
  2. android 焦点问题
  3. android用DroidDraw实现可视化UI编程
  4. Android 如何保持横竖屏切换不变以及Frag
  5. Android自适应拉伸图片
  6. Android(安卓): 控制图片如何resized/mov
  7. Android驱动使用JNI调用
  8. Android使用HttpURLConnection和HttpClie
  9. Android(安卓)JNI 使用的数据结构JNINati
  10. Android-通过TensorFlow添加机器学习到Ap