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

本文深入探讨了垃圾回收机制中的GarbageCollectGeneration方法,通过传递不同的Generation参数实现对不同代的对象进行垃圾回收。文章详细介绍了该方法的具体实现过程,包括如何暂停执行引擎、调用特定代的垃圾回收方法等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一节中的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启动和暂停的控制…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值