概述
这篇笔记摘抄自老罗的博客:
http://blog.csdn.net/luoshengyang/article/details/41338251
http://blog.csdn.net/luoshengyang/article/details/41822747
Dalvik虚拟机内存分配的底层依赖是基于Doug Lea编写的dlmalloc内存分配器的,在Heap上完成。按照分配规则,没进行一次内存分配都会经过数次尝试:
1. 第一次分配,如果失败,那么进行一次GC,这次GC不回收软引用对象。
2. 第二次分配,如果失败,就增长堆的大小,堆的大小是可以在堆的生长限制之内进行生长的。
3. 第三次分配,如果失败,再进行一次GC,这次GC会收集软引用对象。
4. 第四次分配,如果成功,则返回一个指向内存区域的指针,否则,如果失败,返回空指针并且抛出异常,虚拟机暂停工作。
而在Dalvik虚拟机中,用来分配对象的堆划分为两个部分,一部分叫做Active Heap,另一部分叫做Zygote Heap。