一 ,Android内存分配回收机制
从宏观角度上来看Android系统可以分为三个层次
1. Application Framework,
2. Dalvik 虚拟机
3. Linux内核。
这三个层次都有各自内存相关工作:
1. Application Framework
Anroid基于进程中运行的组件及其状态规定了默认的五个回收优先级:
- Empty process(空进程)
- Background process(后台进程)
- Service process(服务进程)
- Visible process(可见进程)
- Foreground process(前台进程)
系统需要进行内存回收时最先回收空进程,然后是后台进程,以此类推最后才会回收前台进程(一般情况下前台进程就是与用户交互的进程了,如果连前台进程都需要回收那么此时系统几乎不可用了)。
由此也衍生了很多进程保活的方法(提高优先级,互相唤醒,native保活等等),出现了国内各种全家桶,甚至各种杀不死的进程。
Android中由ActivityManagerService 集中管理所有进程的内存资源分配。
2. Linux内核
这里最简单的理解就是ActivityManagerService
会对所有进程进行评分(存放在变量adj中),然后再讲这个评分更新到内核,由内核去完成真正的内存回收(lowmemorykiller
, Oom_killer
)。这里只是大概的流程,中间过