在上面的图片中,Parent2没有根对象,因此GC可以释放Parent2和其孩子Child2的内存以便重新使用。但是Parent1和Child1的情况不同,Parent1有根对象,因此GC不能回收他们,因为他们还在被程序使用。
对于.NET来说,有三类根对象:
在托管代码线程栈上的局部变量 静态变量 GCHandle 对象