|
|
1
5
你所联系的问题的答案能很好地解释它。垃圾收集器被设计用来处理循环中相互引用的对象。
|
|
|
2
0
只要C不引用A,那么A将被垃圾收集。其思想是,一旦对某个特定对象的所有引用都超出范围或被置空/释放,GC就开始工作了。因此,尽管A引用C,但是如果相反的不是真的,那么C就没有办法保持A的句柄。 编辑 :虽然我刚读到你说他们也互相引用,反之亦然。在这种情况下,它不会像这里提到的其他GCed。 |
|
|
3
0
GC将收集根对象未引用的任何对象。根对象通常是由所有AppDomain引用的对象(即加载的程序集/类型对象)、全局和静态对象引用、每个线程各自堆栈上的所有对象引用以及当前加载到CPU寄存器中的任何对象引用。 在收集时,GC遍历所有已知根对象的引用,并将沿途找到的任何对象标记为“正在使用”。完成后,可以安全地收集任何未标记的对象。
通常你不需要考虑这个,它只是工作。但是垃圾收集还有很多内容,为了理解内存管理和编写不会泄漏资源的无错误代码等,您仍然需要了解垃圾收集的基本原理。因此,每个.NET开发人员都应该关注它。下面是一些参考资料,详细解释了CLR如何进行垃圾收集。 MSDN - Garbage Collector Basics and Performance Hints (Rico Mariani) |