• Android内存管理机制


    解读 Andriod 内存管理机制
    一、进程类型
    1、前台进程(foreground):目前正在屏幕上显示的进程和一些系统进程。举例来说, Dialer Storage,Google Search 等系统进程就是前台进程;再举例来说,当你运行一个程序,如浏览器,当浏览器界面在前
    台显示时,浏览器属于前台进程(foreground),但一旦你按 home 回到主界面,浏览器就变成了后台程序(background)。我们最不希望终止的进程就是前台进程。
    2、可见进程(visible):可见进程是一些不再前台,但用户依然可见的进程,举个例来说:widget、输入法等,都属于 visible。这部分进程虽然不在前台,但与我们的使用也密切相关,我们也不希望它们被终
    止(你肯定不希望时钟、天气,新闻等 widget 被终止,那它们将无法同步,你也不希望输入法被终止,否则你每次输入时都需要重新启动输入法)。
    3、次要服务(secondary server):目前正在运行的一些服务(主要服务,如拨号等,是不可能被进程管理终止的,故这里只谈次要服务),举例来说:谷歌企业套件,Gmail 内部存储,联系人内部存储等。这
    部分服务虽然属于次要服务,但很一些系统功能依然息息相关,我们时常需要用到它们,所以也太希望他们被终止。
    4、后台进程(hidden):虽然作者用了 hidden 这个词,但实际即是后台进程(background),就是我们
    通常意义上理解的启动后被切换到后台的进程,如浏览器,阅读器等。当程序显示在屏幕上时,他所运行的进程即为前台进程(foreground),一旦我们按 home 返回主界面(注意是按 home,不是按 back),程序
    就驻留在后台,成为后台进程(background)。后台进程的管理策略有多种:有较为积极的方式,一旦程序到达后台立即终止,这种方式会提高程序的运行速度,但无法加速程序的再次启动;也有较消极的方式,
    尽可能多的保留后台程序,虽然可能会影响到单个程序的运行速度,但在再次启动已启动的程序时,速度会有所提升。这里就需要用户根据自己的使用习惯找到一个平衡点。
    5、内容供应节点(content provider):没有程序实体,进提供内容供别的程序去用的,比如日历供应节
    点,邮件供应节点等。在终止进程时,这类程序应该有较高的优先权。
    6、空进程(empty):没有任何东西在内运行的进程,有些程序,比如 BTE,在程序退出后,依然会在
    进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是提高该程序下次的启动速度或者记
    录程序的一些历史信息。这部分进程无疑是应该最先终止的。

    二、 内存管理机制
    Android 是一个多任务系统。当退出程序时,Android 系统不会立即将它 Kill,这样下次再运行该程序时,可以快速启动。随着系统中保留的程序越来越多,内存会出现不足,此时 Android 系统使用”LowMemory
    Killer”实现内存管理机制,即根据程序的重要性来决定 Kill 谁。Android 将程序的重要性分成以下几类,按照重要性依次降低的顺序:
    这里写图片描述

    其中每个程序都会有一个 oom_adj 值,这个值越小,程序越重要,被 Kill 的可能性越低。除了上述程序重
    要性分类之外,Android 系同还维护着另外一张表,这张表是一个对应关系,以 N1为例:
    这里写图片描述

    这个表是定义了一个对应关系,每一个警戒值对应了一个重要性值,当系统的可用内存低于某个警戒值时,就杀掉所有大于该警戒值对应的重要性值的程序。比如说,当可用内存小于 6144 * 4K = 24MB 时,
    开始杀所有的 EMPTY_APP,当可用内存小于 5632 * 4K = 22MB 时,开始 Kill 所有的 CONTENT_PROVIDER
    和 EMPTY_APP。上面这张对应表是由两个文件组成的:
    /sys/module/lowmemorykiller/parameters/adj 和/sys/module/lowmemorykiller/parameters/minfree。
    使用“ alter minfreee”可以修改 /sys/module/lowmemorykiller/parameters/minfree 这个文件。例如,若将最后一项改为 32 * 1024,那么当可用内存小于 128MB 是,就开始杀所有的 EMPTY_APP。

    三、内存优化模式

    1、游戏玩家/重度浏览器使用者配置
    用户特点:长时间专注于某一特定的,高内存需求
    的程序,对多任务的需求不高
    配置参数:
    这里写图片描述
    Foreground:6
    Visible:8
    Secondary Server:16
    Hiden App:80
    Content Provider:90
    Empty:100

    配置理念:压榨后台进程,内容供应节点和空进程,将内存尽可能多得留给前台进程和系统,提升游
    戏速度和浏览器体验。
    优点:程序启动和运行的速度最快
    缺点:多任务处理不理想,开启程序较多时,后台进程会被终止

    2、多任务配置
    用户特点:同时运行多个应用程序,需要经常在多
    个程序间切换
    配置参数:
    这里写图片描述
    Foreground:6
    Visible:8
    Secondary Server:16
    Hiden App:20
    Content Provider:60
    Empty:100

    配置理念:压榨空进程,给内容供应节点留有一定空间,最大限度提升后台程序的使用空间,提升多
    任务的处理能力
    优点:运行多个程序时,由于可支配内存较多,后台程序不容易被终止
    缺点:程序启动的速度和整体系统的运行速度可能会比游戏玩家配置略慢一些,由于经常运行多任务,
    平时系统的响应速度会受到一定影响。
    3、轻度用户/女生专用配置
    用户特点:手机的主要功能是短信和电话,偶尔用
    用相机自拍
    配置参数:
    这里写图片描述
    Foreground:6
    Visible:8
    Secondary Server:16
    Hiden App:24
    Content Provider:32
    Empty:48

    配置理念:压榨空进程,给内容供应节点留有一定空间,最大限度提升后台程序的使用空间,提升多
    任务的处理能力
    优点:比较均衡的配置,提升了系统的可用内存,使得系统的整体速度得到了提高,拉开了各级进程
    的管理策略层次,使得管理机制更有效率
    缺点:比较均衡的配置,无明显缺点

  • 相关阅读:
    WIN2008 R2 安装SQLSERVER2008笔记
    WINFORM 打开PDF
    Android 笔记:ImageButton单击切换按钮图片效果的实现(转)
    Android笔记: 查看SDK源码
    H5结合百度map实现GPS定位
    js 计算快速统计中用到的日期
    SpringMVC4+MyBatis+SQL Server2014 基于SqlSession实现读写分离(也可以实现主从分离)
    SpringMVC4+MyBatis+SQL Server2014实现读写分离
    SpringMVC4集成ehcache
    C# 匿名类型序列化、反序列化
  • 原文地址:https://www.cnblogs.com/qwop/p/6637399.html
Copyright © 2020-2023  润新知