`
gjhappyyy
  • 浏览: 256266 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Android内存管理机制之一:lowmemory killer

 
阅读更多

(1)Android是一个多任务系统,也就是说可以同时运行多个程序,这个大家应该很熟悉。一般来说,启动运行一个程序是有一定的时间开销的,因 此为了加快运行速度,当你退出一个程序时,Android并不会立即杀掉它,这样下次再运行该程序时,可以很快的启动。随着系统中保留的程序越来越多,内 存肯定会出现不足,这个时候Android系统开始挥舞屠刀杀程序。这里就有一个很明显的问题,杀谁?

(2)Android系统中杀程序 的这个刽子手被称作"LowMemory Killer",它是在Linux内核中实现的。这里它实现了一个机制,由程序的重要性来决定杀谁。通俗来说,谁不干活,先杀谁。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值,这个值越小,程序越重要,被杀的可能性越低。

(3)除了上述程序重要性分类之外,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_PROVIDER和EMPTY_APP。


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

alter minfreee就是修改/sys/module/lowmemorykiller/parameters/minfree这个文件的,举例来说,如果把最后一项改为32 * 1024,那么当可用内存小于128MB是,就开始杀所有的EMPTY_APP。

【转】http://blog.csdn.net/rio2012/article/details/6253165

分享到:
评论

相关推荐

    【性能】OOM原理解析:LowMemoryKiller原理

    随着应用打开数量的增多,系统已使用的内存越来越大,就很有可能导致系统内存不足, 那么需要一个能管理所有进程,根据一定策略来释放进程的策略,这便有了lmk,全称为LowMemoryKiller(低内存杀手),lmkd来决定什么...

    Android内存回收机制

    Android内存回收机制策略 1、GC 2、lowmemorykiller GC GC是java虚拟机的内存...OOM(Out Of Memory) : Android内存管理机制及优化方法(https://www.2cto.com/kf/201805/741791.html) 简言之,即应用占用的最大内存

    android内存管理

    android内存管理目录 Low Memory Killer Ashmem Pmem dalvik虚拟机内存管理

    Android内核驱动—内存管理

    Android内核驱动—内存管理 Low Memory Killer Ashmem pmem

    Android应用程序进程管理

    这个PPT讲Android应用程序进程的启动和回收,主要涉及到Zygote进程、System Server进程,以及组件管理服务ActivityManagerService、窗口服务WindowManagerService,还有专用驱动Low Memory Killer。通过了解Android...

    source insight 4.0完美版(无额外提示)

    source insight 4.0完美版,不会有任何额外提示,内附实现教程,亲测可用。注意此版本只有英文版本。

    Android双进程守护

    通过NDK实现双进程守护

    ThinkPHP提示错误Fatal error: Allowed memory size的解决方法

    如果你的ThinkPHP提示你:致命错误(Fatal error: Allowed memory size),根据网上说的提高服务器可使用内存,我觉得都不是好的解决办法。麻烦也没必要。因为这是ThinkPHP本身存在BUG。 错误提示:Fatal error: ...

    Android代码-一个万能自定义UI性能高效的日历控件

    Freely draw UI with canvas, fast、efficient and low memory. Support month view、 week view、year view、 custom week start、lunar calendar and so on. Hot plug UI customization! You can't think of the ...

    u-boot分析第一阶段和第二阶段流程图:lowlevel_init和start_armboot

    该文件是u-boot分析第一阶段和第二阶段流程图:lowlevel_init和start_armboot,具体分析的文章如下: lowlevel_init:https://blog.csdn.net/zi_yang_/article/details/89182278 start_armboot:...

    Android技术内幕.系统卷(扫描版)

    2.3.3 low memory killer(低内存管理)/52 2.3.4 logger(日志设备)/56 2.3.5 android pmem /65 2.3.6 switch /79 2.3.7 timed gpio /88 2.3.8 android ram console /94 2.4 小结 /99 第3章 android的ipc机制--...

    android_system_memory_lmkd

    过去,在Android系统上,内存监视和非必要进程的杀死是由内核lowmemorykiller驱动程序处理的。 从Linux Kernel 4.12开始,lowmemorykiller驱动程序已被删除,而用户空间lmkd守护程序执行这些任务。 Android属性 可以...

    基于pytorch实现的ICCV2019HarDNet: A Low Memory Traffic Network算法

    (3) dataset,步骤一自己构建的数据集名称 (4) band,输入数据通道数(波段数) (5) n_class, 模型输出通道数(类别) 3、 训练模型位置 模型结构放与net文件中,生成模型文件pt位于Checkpointspath\ 4、 预测...

    LoRA: Low-Rank Adaptation of Large Language Models

    LoRA: Low-Rank Adaptation of Large Language Models

    php运行提示:Fatal error Allowed memory size内存不足的解决方法

    有些朋友新配置的环境或自己新写的程序运行时会碰到fatal error: Allowed memory size of 134217728 bytes exhausted错误,这种问题一个是程序写得不好导致的,另一个是环境配置不好也会出现,像php5.1.27+apache2.2.3...

    Tuning-android-for-lowmemory-abs-2014.pdf

    让安卓在低内存的机器上运行流畅,这是一个艰巨的任务。这篇文档是一个全面的介绍

    PT4303:Low Power Super-heterodyne OOK/ASK Receiver

    PT4303:Low Power Super-heterodyne OOK/ASK Receiver由纳拓科技上传

    android系统框架介绍

    Android系统使用的Linux内核包含了一些专用驱动,例如Logger、Binder、Ashmem、Wakelock、Low-Memory Killer和Alarm等,这些Android专用驱动构成了Android运行时的基石。Android运行时从下到上又包括了HAL层、应用...

    Android代码-LowPoly

    1.You can import the module lowpoly to your project by Android Studio 2.LowPoly is available in the MavenCentral, so getting it as simple as adding it as a dependency compile '...

    Android系统架构概述PPT

    Android系统使用的Linux内核包含了一些专用驱动,例如Logger、Binder、Ashmem、Wakelock、Low-Memory Killer和Alarm等,这些Android专用驱动构成了Android运行时的基石。Android运行时从下到上又包括了HAL层、应用...

Global site tag (gtag.js) - Google Analytics