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  阅读(774)  评论(0编辑  收藏  举报

导航