垃圾收集器从哪里开始?

Foo*_*Foo -1 c# garbage-collection

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

         static void Main()
         {

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

         }

        static void SomeLongRunningProcess()
        {


        }
Run Code Online (Sandbox Code Playgroud)

Kri*_*ten 5

根包括

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

  • @Foo你似乎很困惑,只有一个根.那没有.有许多对象可以作为根对象. (2认同)