C# 垃圾收集器从哪里开始?
从我读到的内容来看,在GC运行扫描之前,GC从“根”开始,跟踪并标记所有活动对象。但我不确定是什么构成了根。例如,在下面的代码中,Main方法从一个线程开始并存在。那么当GC启动时,它如何知道选择哪个部分作为根呢C# 垃圾收集器从哪里开始?,c#,garbage-collection,C#,Garbage Collection,从我读到的内容来看,在GC运行扫描之前,GC从“根”开始,跟踪并标记所有活动对象。但我不确定是什么构成了根。例如,在下面的代码中,Main方法从一个线程开始并存在。那么当GC启动时,它如何知道选择哪个部分作为根呢 static void Main() { var thread = new Thread(SomeLongRunningProcess); thread.Start(); }
static void Main()
{
var thread = new Thread(SomeLongRunningProcess);
thread.Start();
}
static void SomeLongRunningProcess()
{
}
根包括
- 静态字段(对于流程中的每个AppDomain,加载的所有程序集中所有类型的所有静态字段)
- 局部变量(包括CPU寄存器中每个线程的变量)
- f-可达队列(具有终结器的对象列表)
- 终结队列(对象列表,否则为垃圾,但等待终结)