`
fonter
  • 浏览: 867466 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多

下载Android安安软件请到:http://code.google.com/p/andbox

 

(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://www.miui.com/forum-viewthread-tid-29268-extra-%26page%3D1-page-1.html

分享到:
评论

相关推荐

    Android内核驱动——内存管理

    LowMemoryKiller(低内存杀手)是Android内核中一种独特的内存管理机制,它在标准Linux内核的Out-of-Memory(OOM)机制基础上进行了改良,专门设计用于应对Android设备在运行过程中可能遇到的内存紧张情况。...

    Android内核驱动——内存管理.pdf

    Low Memory Killer 提供了三个用户接口,分别是设置空闲内存阈值的接口 /sys/module/lowmemorykiller/parameters/minfree,设置对应优先级的接口 /sys/module/lowmemorykiller/parameters/adj,设置各个进程优先级的...

    android 内存分析

    **LowMemoryKiller** 是 Android 内核中的一个重要组件,用于管理设备内存,特别是当系统面临内存压力时,通过合理地终止某些进程来释放内存资源。这一机制基于 Linux 内核中的 OOM(Out Of Memory)机制进行改进,...

    android内存管理机制分析[归类].pdf

    Android系统的内存管理机制是其高效运行的关键之一。Android内核基于Linux 2.6,它包含了一系列特定于Android平台的设备驱动,如Android Binder用于进程间通信,电源管理驱动优化了嵌入式设备的电源使用,以及低内存...

    Android内核驱动—内存管理

    LowMemoryKiller是一种在标准Linux内核的OOM(Out of Memory)机制基础上改进而来的内存管理机制。当系统检测到内存压力过大时,LowMemoryKiller会自动识别并终止那些占用大量内存但又不是特别重要的进程,从而释放...

    Android内存回收机制

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

    Android3.0内存管理机制分析.pdf

    同时,Android 3.0还引入了低内存杀手(Low Memory Killer)机制,当系统内存不足时,它会选择优先级较低的进程进行杀掉,以保证关键服务的正常运行。 另外,Android 3.0内存管理还包括了内存泄漏检测和预防策略,...

    安卓kernel 内存回收机制

    1. LMK(Low Memory Killer)机制:安卓系统通过LMK机制管理内存使用。当系统内存低于一定阈值时,LMK会按照优先级杀死一些后台进程来释放内存。这保证了前台应用能够获得足够的内存资源,提升用户体验。 2. 内存...

    android内存管理了解.pptx

    LMK的实现位于`drivers/staging/Android/lowmemorykiller.c`,它通过注册为Cache Shrinker来参与内存回收过程。在内存不足时,内核线程kswapd会调用注册的Shrinker回调函数,即`lowmem_shrink`,以回收内存页。 2. ...

    嵌入式开发经验:Android系统的内存管理研究

    而Low Memory Killer则是一种内存管理机制,用来在系统内存紧张时自动关闭一些后台进程。 在Linux内存管理中,还涉及到Overcommit的概念,这是Linux系统对于内存分配的一种策略。简而言之,Overcommit允许系统分配...

    android低内存管理策略

    其内存管理机制是确保系统流畅运行的关键之一。不同于传统的Linux OOM(Out Of Memory)杀手机制,Android采用了一套更为精细的低内存管理策略,旨在平衡应用性能与系统稳定性。 #### 二、LOWMEMORYKILLER深入解读 ...

    R16 Android方案内存配置说明.pdf

    文档介绍了drop_cache和lowmemorykiller两个重要的内存管理机制。 - **drop_cache机制**:Linux会将大部分空闲内存用于文件系统缓存,而这可能导致系统空闲内存不足,影响系统效率。drop_cache机制能够定期回收文件...

    深入探索Android内存优化1

    优化内存的目标在于防止应用出现Out of Memory (OOM)错误,降低由于内存过大导致应用被Low Memory Killer (LMK)机制杀死的风险,减少由于不合理内存使用引发的垃圾收集(GC)次数,进而避免应用卡顿。同时,优化内存...

    Android LMK机制简介

    因此,Android引入了一种专门针对低内存情况的管理机制——LMK(Low Memory Killer)。 **1.3.1. Android 系统特点** Android系统的运行环境较为复杂,它需要支持各种类型的应用程序,同时还要保证用户体验的流畅性...

    Android内核和驱动篇-Android内核介绍[归纳].pdf

    源代码位于 drivers/staging/android/lowmemorykiller.c。 Low Memory Killer 是 Android 中的一种内存管理机制。当系统内存不足时,它可以杀死一些进程以释放内存,从而确保系统的稳定性。 4. 匿名共享内存...

    Android-OOM.rar_memory android_memory for Android_out

    在Android开发过程中,"Out Of Memory"(OOM)错误是一个常见的问题,特别是在处理大量数据、图像或者长时间运行的任务时...总的来说,理解Android内存管理机制并采取有效的内存优化策略,是防止和解决OOM问题的关键。

    Android 内核分析报告4

    总体来看,LowMemoryKiller是一种专门针对Android系统设计的内存管理机制,它能够在内存资源紧张时有效地释放内存,从而提高系统的整体稳定性。虽然LMK与标准Linux内核中的OOMKiller在设计理念上有很多共通之处,但...

Global site tag (gtag.js) - Google Analytics