SSCLI中GC垃圾回收源碼分析(3) - GarbageCollectGeneration()與SuspendEE
上一節(jié)中的GarbageCollect()方法,主要是傳遞不同的Generation做為參數(shù),來調(diào)用GarbageCollectGeneration方法,實現(xiàn)對heap中不同的Generation進行回收。
精簡了以后的GarbageCollectGeneration方法以后的代碼如下:
在第一次調(diào)用該方法的時候,Gen傳遞過來的參數(shù)值為max_generation,表示對GC Heap中所有Generation進行垃圾回收。從上面的代碼中可以看到,在對指定的代進行回收的時候,首先Suspend住了Execute Engine。然后調(diào)用對第一代Generation進行回收的方法:
gc_heap::garbage_collect(condemned_generation_number);
在這個回收的過程中,可能會產(chǎn)生異常失敗,這里用了一個goto語句來進行重試。在完成了回收之后,重新啟動Runtime EE。同時,暫停住EE也可以使在后面根據(jù)定義的一組Root來尋找live object的時候更加的安全和迅速。
這里,考慮是不是加入Execute Engine啟動和暫停的控制…
posted on 2009-09-14 18:39 lbq1221119 閱讀(798) 評論(0) 收藏 舉報
浙公網(wǎng)安備 33010602011771號