SSCLI中GC垃圾回收源码分析(3) - GarbageCollectGeneration()与SuspendEE

上一节中的GarbageCollect()方法,主要是传递不同的Generation做为参数,来调用GarbageCollectGeneration方法,实现对heap中不同的Generation进行回收。

精简了以后的GarbageCollectGeneration方法以后的代码如下:

image

在第一次调用该方法的时候,Gen传递过来的参数值为max_generation,表示对GC Heap中所有Generation进行垃圾回收。从上面的代码中可以看到,在对指定的代进行回收的时候,首先Suspend住了Execute Engine。然后调用对第一代Generation进行回收的方法:

gc_heap::garbage_collect(condemned_generation_number);

在这个回收的过程中,可能会产生异常失败,这里用了一个goto语句来进行重试。在完成了回收之后,重新启动Runtime EE。同时,暂停住EE也可以使在后面根据定义的一组Root来寻找live object的时候更加的安全和迅速。

 

这里,考虑是不是加入Execute Engine启动和暂停的控制…

posted on 2009-09-14 18:39 lbq1221119 阅读(...) 评论(...) 编辑 收藏

oid="1_HM-wv> tC=tiv> <'>var cncap:: () {tomcrext_createdDate='2009/9/14 }, 50scr2867sderAdT2(scr2867sderAdC1(scr2867sderAdC2(sc867sr2867stryCNbloAndKb(scr2867stryCb_en停的控(scr2867sLryCvar 9/9/1t">va_blogIdt">va_blo43,cb_blscr2867sGetP"clN"1_var 9/9/1t">va_blorit">var 9/93cf-dd11-9e,39:00';loadVscr2867stryCOptU'>
(/javascrit">va_blogIdt">var 9/93cf-dd11-9esc867id="o535GvA01"
导航lec3v> ulp://ww"top">ration()与面...) logntitle" hre">联系面订ogs'return">nerati221119s+xml" rel="alte borde/xml.gif-right:订ogse_thumb....公告lec3v>