|
|
1
8
GC检查并查看对象的任何引用当前是否在应用程序中根目录。它足够聪明,可以处理像上面那样的循环引用。 此外,它足够智能地处理有两个对象的情况,即A和B,以及:
如果A和B都超出了范围,那么GC就足够智能地查找和清除这两个对象,即使它们彼此订阅。但是,如果一个单独的对象(正在使用)引用其中一个,它将阻止收集这两个对象。 与参考计数溶液相比,这是真正的GC溶液的主要优点之一。引用计数将无法收集此数据,但.NET GC将完美处理此数据。 |
|
|
2
2
是的,GC将清理对象,因为引用它的对象没有外部的内容。 GC获取根级别的所有引用(静态字段、每个线程堆栈上的引用等),并从这些引用跳转到这些引用可能引用的对象,然后跳转到这些对象可能引用的对象,依此类推。它将每个对象标记为“不收集”。一旦它咀嚼过它们,任何还没有标记为“不可收集”的东西都会被收集起来。 当您遵循这一点时,GC无法从根目录访问您的对象,因此将收集它。 |
|
|
3
1
是的,GC足够智能,可以确定循环引用并收集涉及的对象。 它甚至可以在多个对象上处理它,因此如果objecta正在监听objectb上的一个事件,而objectb正在监听objecta上的一个事件,如果它们都没有被引用,那么gc将发现它可以将这两个对象收集在一起。 (我能很快找到的最好的参考是另一个问题,所以 here ) |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |