NET中EE垃圾回收原理

1、EE是执行引擎,EE拥有对象主要是两种途径:

1)NEW方式
2)静态变量
2、对象可能拥有其它对象,这是树图的开始,CLR以树图为基础进行搜索,记录对象的引用。程序拥有的所有静态变量或者栈上的所有变量为最初的树集。
3、垃圾收集模块决定要开始收集时,调用EE,请求停止所有线程,从而可以检查线程堆栈。
1)EE办理后,栈冻结,垃圾收集器通知EE开始遍历所有的栈和静态变量,然后返回最初的树集。EE中有个遍历模块负责这件事。
2)然后,CLR每次用一个树调用垃圾收集器模块。垃圾收集器收到树后,将遍历生成的静态数据,这些数据告诉我们对象实例的哪个偏移量对应着对其他对象的引用。
3)挨个检查所有的引用位置,对每个位置进行递归检查。当退出递归过程时,树图中由这个根出发能够到达的树都被检查过了,这个根能到达的所有地方都被标记了。
4、具体的工作代码不用递归编写,而是用检查栈的方式。栈空意味着这个根能到达的所有对象均已经到达。
5、检查完并标记完程序能到达的每个对象后,我们能一个个对象地检查内存,如果没有被标记,则是垃圾,特定时候,决定垃圾是否被压缩。
6、完全的垃圾收集操作,我们检查所有的根能到达的所有对象,有办法只收集最近分配的对象,称为第0代收集,同时找到一个办法,保证较老的对象引用了这些新对象可以被我们知道,这些特殊的引用位置有办法很快找到,不用遍历查找所有对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值