垃圾收集器从哪里开始?

时间:2013-10-02 15:51:39

标签: c# garbage-collection

从我读到的内容开始,GC在“root”处启动并跟随并标记所有活动对象,然后GC运行扫描。但我不确定是什么构成了根。例如,在下面的代码中,Main方法从一个线程开始并存在。因此,当GC启动时,它如何知道选择哪个部分作为根?

         static void Main()
         {

             var thread = new Thread(SomeLongRunningProcess);
             thread.Start();

         }

        static void SomeLongRunningProcess()
        {


        }

1 个答案:

答案 0 :(得分:5)

根源包括

  • 静态字段(加载的所有程序集中所有类型的所有静态字段,对于流程中的每个AppDomain)
  • 局部变量(包括CPU寄存器中的每个线程)
  • f-reachable队列(具有终结器的对象列表)
  • 终结队列(一个对象列表,否则是垃圾,但等待最终确定)