以下示例中哪些被认为是GC根?

时间:2015-11-02 07:32:35

标签: c# garbage-collection

考虑以下设想的例子:

1 public class Example
2 {
3     static CountryList countryList = new CountryList();
4
5     public void DoWork(ShoppingCart cart)
6     {
7           Method1();
8
9           Method2();
10
11          cart.DoSomething();
12    }
13
14    private void Method1()
15    {
16        var person = new Person();
17    }
18
19    private void Method2()
20    {
21        var order = new Order();
22    }
23 }

在上面的示例中,假设当前正在执行Method2,并且当CLR尝试为new Order()的调用分配内存时,它会发现需要运行GC。

如果我对以下内容有误,请纠正我:

  • 垃圾收集器暂停第21行的所有活动并启动收集,一旦完成,它继续第21行等?
  • 当垃圾收集器暂停第21行的所有活动时,它如何找到GC根?这些根源是否是我当前的callstack? GC是否会在当前的callstack中找到根并找到根? 例如:我认为上述程序中的根将是'order','cart'和'countryList'。此时,如果运行GC,则收集的唯一对象是“人”称为无法访问的对象。我是对的吗?

0 个答案:

没有答案