打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【WMRCCD】安卓系统LMK内存管理机制,你不知道的秘密...
本帖最后由 WMRCCD 于 2014-5-12 16:59 编辑

大多时候我们在挑选刷机包的时候总是会去在意在内存控制上做的如何,或者是说有的ROM包在拨号软件上能够实现秒开,这些都是我们在乎的,其实这些问题都和内存有关系,特别是对于一些内存不够多的机型的机友来说,在内存管理上是选择ROM包的一个重要条件,可是我们又对安卓系统的LMK内存管理机制了解多少呢,今天给大家科普下。
Android系统内存管理机制:
    其实我们在用安卓系统手机的时候不用太在意剩余内存,Android上的应用是java,当然需要虚拟机,而android上的应用是带有独立虚拟机的,也就是每开一个应用就会打开一个独立的虚拟机。其实和java的*回收机制类似,系统有一个规则来回收内存。进行内存调度有个阀值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西。当然这个值默认设置得很小,所以你会看到内存老在很少的数值徘徊。但事实上他并不影响速度。相反加快了下次启动应用的速度。这本来就是 android标榜的优势之一,如果人为去关闭进程,没有太大必要。特别是使用自动关进程的软件。为什么内存少的时候运行大型程序会慢呢,原因是:在内存剩余不多时打开大型程序时会触发系统自身的调进程调度策略,这是十分消耗系统资源的操作,特别是在一个程序频繁向系统申请内存的时候。这种情况下系统并不会关闭所有打开的进程,而是选择性关闭,频繁的调度自然会拖慢系统。
Android进程种类:
1. 前台进程(foreground)
   目前正在屏幕上显示的进程和一些系统进程。举例来说,Dialer,Storage,Google Search等系统进程就是前台进程;再举例来说,当你运行一个程序,如浏览器,当浏览器界面在前台显示时,浏览器属于前台进程(foreground),但一旦你按home回到主界面,浏览器就变成了后台程序(background)。我们最不希望终止的进程就是前台进程。
2. 可见进程(visible)
   可见进程是一些不再前台,但用户依然可见的进程,举个例来说:widget、输入法等,都属于visible。这部分进程虽然不在前台,但与我们的使用也密切相关,我们也不希望它们被终止(你肯定不希望时钟、天气,新闻等widget被终止,那它们将无法同步,你也不希望输入法被终止,否则你每次输入时都需要重新启动输入法)
3.  桌面进程(home app)
   即launcher,保证在多任务切换之后,可以快速返回到home界面而不需重新加载launcher
4. 次要服务(secondary server)
   目前正在运行的一些服务(主要服务,如拨号等,是不可能被进程管理终止的,故这里只谈次要服务),举例来说:谷歌企业套件,Gmail内部存储,联系人内部存储等。这部分服务虽然属于次要服务,但很一些系统功能依然息息相关,我们时常需要用到它们,所以也太希望他们被终止
5. 后台进程(hidden)
   即是后台进程(background),就是我们通常意义上理解的启动后被切换到后台的进程,如浏览器,阅读器等。当程序显示在屏幕上时,他所运行的进程即为前台进程(foreground),一旦我们按home返回主界面(注意是按home,不是按back),程序就驻留在后台,成为后台进程(background)。后台进程的管理策略有多种:有较为积极的方式,一旦程序到达后台立即终止,这种方式会提高程序的运行速度,但无法加速程序的再次启动;也有较消极的方式,尽可能多的保留后台程序,虽然可能会影响到单个程序的运行速度,但在再次启动已启动的程序时,速度会有所提升。这里就需要用户根据自己的使用习惯找到一个平衡点
6.  内容供应节点(content provider)
   没有程序实体,进提供内容供别的程序去用的,比如日历供应节点,邮件供应节点等。在终止进程时,这类程序应该有较高的优先权
7. 空进程(empty)
   没有任何东西在内运行的进程,有些程序,比如BTE,在程序退出后,依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是提高该程序下次的启动速度或者记录程序的一些历史信息。这部分进程无疑是应该最先终止的。
非常重要的幽灵刽子手功能 LMK (Low Memory Killer):
1,执行条件
剩余内存小于应用定义的APP_MEM值,开始查看adj值列表,kill相应程序。
2,实现机制
Low Memory Killer的源代码在kernel/drivers/staging/android/lowmemorykiller.c中模块加载和退出的函数,主要的功能就是register_shrinker和unregister_shrinker结构体lowmem_shrinker。主要是将函数lowmem_shrink注册到shrinker链表里,在mm_scan调用。
通俗介绍
简单的说系统会设置一个最小的LKM内存阀值,例如系统默认设置为50M,当我们查看手机内存小于50M的时候,LMK机制开始关闭进程,所以大家也没必要时不时的清理你的内存了,就让系统自己去干它本该干的事情好了。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
为什么 12G 内存的 Android 手机,依旧会被杀后台
开机内存占一半,应用后台杀不死?那些不了解的Android后台机制。 来自 Anm718
专业解答:Android手机需要清内存吗?
android的进程管理原理
为什么Android系统的内存越来越小?
你还在清理进程释放RAM吗?别再损害手机了
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服