Dalvik虚拟机垃圾收集(GC)过程分析.docx
《Dalvik虚拟机垃圾收集(GC)过程分析.docx》由会员分享,可在线阅读,更多相关《Dalvik虚拟机垃圾收集(GC)过程分析.docx(45页珍藏版)》请在优知文库上搜索。
1、DaIVik虚拟机垃圾收集(GC)过程分析前面我们分析了Oa1.vik虚拟机堆的创立过程,以及Java对象在堆上的分配过程。这些知识都是理解Ita1.vik虔拟批垃圾收集过程的基础。垃圾收集是一个发杂的过程,它要将那些不再被引用的对象进行回收,一方面要求Da1.vik虚拟机能鲂标记出哪些对象是不再被引用的.另一方面要求DfnVik虚拟机尽快地回收内存.防止陶用程序长时间停顿.本文就将详细分析Da1.Yik虚拟机是如何裤决上述问磔完成垃圾收集过程的.Da1.vik虚拟机使用Vark-Sweep算法来进行垃圾收集,顾名思义,Mark-Sweep算法就是为Mark和Sweep两个阶段进行垃圾回收。其
2、中,Mark阶段从根集(ROO1.Sc1.开始,递归地标记出当前所有被引用的时象,而Swwp阶段负贲回收那些没有被引用的对望.在分析Da1.vik虚拟机使用的Mark-SVCeP算法之前,我们先来了解一下什么情况下会触发GC.Da1.vik虚拟机在三种情况下会触发四种类里的GC.母一种类型GC使用一个GCSPCC结构体来描述,它的定义如下所示:cppviewp1.aincopy在C(三)E上杳看代码片源生到我的代码片structGcSpec(Iftrue,on1.ytheapp1.ictionheapisthreatened.*/boo1.isPartia1.:Iftrue,thetracei
3、srunconcurrent1.ywiththemutator.*/boo1.iSConcurren1.;Togg1.esforthesoftreferencec1.earingpo1.icy.*/boo1.doPreserve:Ana三eforthisgarbageco1.1.ectionmode./constchar*rcason;);这个结构体定义在文件dfi1.ik11a1.1.ocHeap.h,GcSpec结构体的各个成仍变球的含义如下所示:isPartia1.:为true时.表示仅仅回收Active堆的垃圾:为fa1.se时,表示同时回收Active堆和Zygote堆的坨圾.iSC
4、oncurrent:为IrUI1时,表示执行并行GC:为fa1.se时,表示执行非并行GC-doPreserve:为true时,表示在执行GC的过程中,不回收软引用引用的对象:为fa1.se时,表示在执行GC的过程中,回收软引用引用的对敛,reason:一个描述性的字符即“DaVIik虚拟机定义了四种类的GC,如下所示:cppVieVp1.aincopy在CoDE上查看代码片派生到我的代码片*Notenoughspaceforanordinary.Objecttobea1.1.ocated.*/externconstGcSec*GC_FOR_MA1.1.OC;*AutonaticGCtrigg
5、eredbyexceedingaheapoccupancythresho1.d./externconstGcSpec*GC_C(WcHRRENI;*Exp1.icitGCviaRuntiae.gc(),YMRuntimp.gc(),orSIG1.SR1./externconstGcSpec*GCEXP1.ICIT;*Fina1.attempttorec1.aimmemorybeforethrowinganOOM.*/externconstGcSpec*GC_BEFORE_(X)Y;这四个全同变量:声明在文件da1.vik/vm/a1.1.oc/Heap.h中。它们的含义如卜所示IGcjorji
6、ai1.oc:表示是在堆上分足对象时内存法乏触发的gc.GC_CONCtRREYT:表示是在已分配内存到达一定所之后触发的GC.GC1.XP1.ICIT:役示是应用程序调用System,gc、YMRUntimc.gc接11或者收到SIG1.SR1信号时触发的GC.GCHEFORE00M:表示是在准符拊OOM异常之前进行的最后努力而触发的GC。实际上,(X:FoRWAU.0C、GJCONC1.RRENT和CUBEFORE(KW-:种类型的GC都是在分泡时象的过程触发的,在前面一文,我们提到.Da1.vik虚拟机在JaYa堆匕分配对象的时候,在碰到分配失败的情况,会尝试门用函数gcForMa1.I
7、。C进行垃圾I收.函数KcForMii1.1.oc的实现如卜所示:eppviewp1.aincopy在CODE上查看代码片派生到我的代码片staticvoidgcForMa1.Ioc(boo1.c1earSofIReferences)constGcSpec*spec=CIearSOf1.ReferenCeS?GC_BEI:ORE_OOM:GCFORHA1.1.OC:dvfCo11cctGarbaeIntcrna1(spec);)这个函数定义在文件da1.vikv三a1.1.oc/Heap.cpp.参数C1.earSoftRefereCeS表示是否要对软引用引用的对象诳行回收,如果要对软引用引用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Dalvik 虚拟机 垃圾 收集 GC 过程 分析
