Android培训班(81)Dalvik虚拟机的垃圾回收3
2011-11-27 10:33
302 查看
下面就来先看看Dalvik虚拟机整个标记和清除中使用到那些函数,在文件alloc/MarkSweep.h里有函数如下:1)调用函数dvmHeapBeginMarkStep来创建位图,并从对象位图里拷贝一份位图出来,以便后面对这个位图进行标记。2)调用函数dvmHeapMarkRootSet对所有根对象进行标记。3)调用函数dvmHeapScanMarkedObjects根据上一个函数给出的根对象位图,对每一个根相关的位图进行计算,如果这个根对象有被引用,就标记为使用。这个过程是递归调用的过程,从根开始不断重复地对子树进行标记的过程。4)调用函数dvmHeapHandleReferences对J***A类对象的引用类型进行处理。主要处理三个直接的了类:SoftReference,WeakReference,PhantomReference。SoftReference对象封装了对引用目标的“软引用”;WeakReference封装了对引用目标的“弱引用”;而PhantomReference封装了对引用目标的“影子引用。强引用禁止引用目标被垃圾收集,而软引用、弱引用和影子引用不禁止。5)调用函数dvmHeapScheduleFinalizations对未曾标记的对象进行完成调用,让每一个对象最后删除动作可以运行,以便后面从内存里把对象删除,相当于对象的析构作用。6)调用函数dvmHeapSweepUnmarkedObjects对未曾标记的对象进行清除操作,也就是删除没有再使用的对象。7)调用函数dvmHeapFinishMarkStep对已经删除的对象进行内存回收,可以调用堆管理函数改变目前堆使用的内存,并整理内存,就可以得到更多空闲的内存了。
这个过程,就是Dalvik虚拟机的整个标记和删除的算法过程,实际的代码会相当复杂,算法上是很清楚的,就是细节、时间方面要求相当严格,否则乱删除还在使用的对象,就导致整个虚拟机运行出错。
这个过程,就是Dalvik虚拟机的整个标记和删除的算法过程,实际的代码会相当复杂,算法上是很清楚的,就是细节、时间方面要求相当严格,否则乱删除还在使用的对象,就导致整个虚拟机运行出错。
相关文章推荐
- Android培训班(81)Dalvik虚拟机的垃圾回收3
- Android培训班(81)Dalvik虚拟机的垃圾回收3
- Android培训班(80)Dalvik虚拟机的垃圾回收2
- Android培训班(80)Dalvik虚拟机的垃圾回收2
- Android培训班(80)Dalvik虚拟机的垃圾回收2
- Android培训班(79)Dalvik虚拟机的垃圾回收1
- Android培训班(79)Dalvik虚拟机的垃圾回收1
- Android培训班(79)Dalvik虚拟机的垃圾回收1
- Android培训班(82)Dalvik虚拟机的垃圾回收4
- Android培训班(82)Dalvik虚拟机的垃圾回收4
- Android培训班(82)Dalvik虚拟机的垃圾回收4
- 对android虚拟机的理解,包括内存管理机制垃圾回收机制。dalvik和art区别
- Android_对android虚拟机的理解,包括内存管理机制垃圾回收机制。dalvik和art区别
- Android培训班(56)Dalvik虚拟机的入口点
- Android培训班(76)Dalvik虚拟机的CallStaticVoidMethod函数
- Android培训班(56)Dalvik虚拟机的入口点
- 对android虚拟机的理解,包括内存管理机制,垃圾回收机制
- Android培训班(76)Dalvik虚拟机的CallStaticVoidMethod函数
- Android培训班(56)Dalvik虚拟机的入口点
- Android培训班(83)Dalvik虚拟机的初始化