转:Android内存管理机制

news/2024/7/20 14:22:37 标签: 移动开发, 内存管理, 操作系统

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


http://www.niftyadmin.cn/n/1730735.html

相关文章

2021-09-29CSU18MB86芯片用于开发打气泵方案

CSU18MB86芯片是一个8位RISC架构的高性能单片机,集成了24Bit高精度ADC和LCD显示模块。内部集成8k*16Bits的MTP程序存储器。可作为充气泵芯片进行软硬件设计开发      充气泵芯片方案      高性能的RISC CPU:      8位单片机MCU      内置…

2021-09-30打气泵芯片CSU18P88开发充气泵方案

电动打气泵芯片方案,西城微提供打气泵芯片方案技术开发服务:      一、功能与规格      1、测量范围:5~150PSI      2、测量精度:5~100PSI 为1% 、100PSI以上为2PSI      3、分辨率:0.5 PS…

转:bitmap设置图片尺寸缩小,避免内存溢出/OutOfMemoryError的优化方法

我们都知道Android的Dalvik VM为一个应用提供了大约16MB的内存,一般我们处理超过8MB的图片将会出现OutOfMemoryError异常(内存溢出异常),报如下错误: 20155392-byte external allocation too large for this process. …

linux搭建pptp脚本,Linux搭建PPtp

先查看mppe模块是否加载:lsmod| grep -i ppp如果有ppp_mppe 39881 2ppp_generic 62561 8 ppp_synctty,ppp_async,ppp_deflate,ppp_mppe说明模块加载成功然后安装pptp,编译./configure –prefix/usr/local/pptpd;make;make install先在/usr/local/pptp目录建etc目录 之后从pptpd…

转:Android 释放内存中的图片资源

最近做的项目用到很多图片,经常出现内存溢出。   Andorid限制了8M的图片内存,如果超过了就会溢出,那就是要及时释放内存中的图片资源。   我之前的做法是简单对图片对象设置null。其实这样是不行的,图片依然在内存中的。   …

电动充气泵方案与充气泵芯片

电动充气泵具有体积小、智能数显、预设胎压、动态测量等功能,颇受出行人员喜爱。充气泵芯片使用CSU18MB86,外围电路简洁,气压检测准确。      一、充气泵方案介绍      电动充气泵方案的原理简单,在使用时自动检测胎压压力…

linux系统安装smb服务,Linux 搭建Samba(共享)服务

在Windows系统下实现共享不需要安装任何服务,但是在Linux系统下要想实现共享就需要搭建samba服务。samba服务主要就是为了Windows系统与Linux系统下文件互相传递。在Linux系统下搭建samba服务,非常简单仅两步:一、安装并配置smb服务&#xff…

2021-10-11PCBA方案——额温枪(红外线测温仪)方案开发

额温枪(红外线测温仪)针对量测人体额温基准设计,使用非常简单、方便。1秒可准确测温,无镭射点,免除对眼睛之潜在伤害,不需接触人体皮肤,避免交叉感染,一键测温,排查流感。…