当前位置: 代码迷 >> Android >> Android内存储器管理机制
  详细解决方案

Android内存储器管理机制

热度:17   发布时间:2016-05-01 16:43:42.0
Android内存管理机制

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这个文件的,举例来说,如果把最后项改为

  相关解决方案