1,CLR开始GC
2,暂停进程所有线程(防止线程在CLR检查期间访问对象并更改其状态)
3,CLR进入GC的标记阶段(首先将所有对象同步块索引字段中的一位设为0)
4,CLR检查所有活动根,如果根为null则检查下一个。任何根如果引用了堆上的对象,CLR都会标记该对象(将该对象同步块索引字段中的一位设为1)
5,一个对象被标记后,CLR会查询该对象的根,标记它们引用的对象。如果发现已经标记,就不重新检查对象的字段,避免产生死循环。
1,CLR开始GC
2,暂停进程所有线程(防止线程在CLR检查期间访问对象并更改其状态)
3,CLR进入GC的标记阶段(首先将所有对象同步块索引字段中的一位设为0)
4,CLR检查所有活动根,如果根为null则检查下一个。任何根如果引用了堆上的对象,CLR都会标记该对象(将该对象同步块索引字段中的一位设为1)
5,一个对象被标记后,CLR会查询该对象的根,标记它们引用的对象。如果发现已经标记,就不重新检查对象的字段,避免产生死循环。