Android性能:内存篇之进程内存管理

Android性能:内存篇之进程内存管理

在此之前,我们已经通过《Android性能:内存篇之Android虚拟机》聊了Android虚拟机的基础知识及Android所使用的Delvik、ART之间的差异,也在《Android性能:内存篇之内存回收》聊了通用通用的内存回收算法和内存回收机制,接下来我们再了解了解Android中针对进程的内存策略与内存的分配。

默认回收过程

Android 操作系统中的内存回收可分为两个层次,即默认内存回收与内核级内存回收。

Android 系统中内存回收的触发点大致可分为三种情况。
  第一,用户程序调用 StartActivity(), 使当前活动的 Activity 被覆盖;
  第二,用户按 back 键,退出当前应用程序;
  第三,启动一个新的应用程序。这些能够触发内存回收的事件最终调用的函数接口是 activityIdleInternal()。

Low Memory Kill机制

系统出于体验和性能上的考虑,app在退到后台时系统并不会真正的kill掉这个进程,而是将其缓存起来。打开的应用越多,后台缓存的进程也越多。在系统内存不足的情况下,系统开始依据自身的一套进程回收机制来判断要kill掉哪些进程,以腾出内存来供给需要的app, 这套杀进程回收内存的机制就叫 Low Memory Killer ,它是基于Linux内核的 OOM Killer机制诞生。

LMK是放在kernel的一个安卓特有的专用驱动,负责的是杀进程,oom负责的是进程的自杀,两者不一样的。
这个就简单了,当ram不足的时候,会触发这个机制,至于干掉哪个进程:

表面来说,进程有5个等级,更具等级优先级来干掉 前台进程>可见进程>服务进程>后台进程>空进程最后面那个越容易被销毁。

深层来说,进程等级直接反应在文件就是oom_adj的值,值越大越容易被杀,这个值可以在/proc/[pid]/oom_adj看到,注意的是
zygote进程是-16,基本不死的,系统进程也在-12左右,想要你的进程常驻内存,可以在配置文件设置android:persistent,提高oom_adj的值。

进程内存回收原则

下面将从 Application Framework 和 Linux kernel 两个层次分析 Android 操作系统的资源管理机制。

Android 之所以采用特殊的资源管理机制,原因在于其设计之初就是面向移动终端,所有可用的内存仅限于系统 RAM,必须针对这种限制设计相应的优化方案。

当 Android 应用程序退出时,并不清理其所占用的内存,Linux 内核进程也相应的继续存在,所谓“退出但不关闭”。从而使得用户调用程序时能够在第一时间得到响应。

当系统内存不足时,系统将激活内存回收过程。为了不因内存回收影响用户体验(如杀死当前的活动进程),进程优先级
Android 基于进程中运行的组件及其状态规定了默认的五个回收优先级:IMPORTANCE_FOREGROUND、IMPORTANCE_VISIBLE、IMPORTANCE_SERVICE、IMPORTANCE_BACKGROUND、IMPORTANCE_EMPTY;

这几种优先级的回收顺序是 Empty process、Background process、Service process、Visible process、Foreground process。

ActivityManagerService 集中管理所有进程的内存资源分配。所有进程需要申请或释放内存之前必须调用ActivityManagerService 对象,获得其“许可”之后才能进行下一步操作,或者 ActivityManagerService 将直接“代劳”。

Linux 内核真正回收具体进程:ActivityManagerService对所有进程进行评分(评分存放在变量adj中)更新评分到Linux 内核,由Linux 内核完成真正的内存回收。

Native内存和heap内存

同个应用中,并非所有申请内存都占用堆内存,android中内存分为两块,一个是native内存,是lib层c/才++库所占用的内存;还有一个heap内存,是java实例对象的空间。
在3.0以前,bitmap是分配在native内存当中的,3.0以后都是分配在heap空间的,所以会有我们说的因为图片导致的oom现象,bitmap的优化点,后面会说到。
怎么查看native和heap内存呢,万能DDMS直接可以读到,当然命令dumpsys meminfo也是可以看到的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值