.net 垃圾收集未根Gen 2对象引用的Gen 1对象

.net 垃圾收集未根Gen 2对象引用的Gen 1对象,.net,garbage-collection,.net,Garbage Collection,我在228页的书中发现了一个有趣的说法: 值得注意的是,任何由无根Gen 2对象引用的Gen 1对象都不是 在Gen 1集合中收集,但仅在Gen 2集合中收集其父集合时收集 这是正确的吗?如果是,原因是什么?我想这是因为Gen 1对象是根对象/被Gen 2对象引用的,所以Gen 1对象在不再被引用之前无法被收集,当引用它的Gen 2对象被收集时,它将被收集。但是Gen 2对象不是应用程序的根,就像线程堆栈上的全局和静态对象或局部变量/参数对象指针一样,不是吗?如果一个对象被另一个尚未收集的对象引

我在228页的书中发现了一个有趣的说法:

值得注意的是,任何由无根Gen 2对象引用的Gen 1对象都不是 在Gen 1集合中收集,但仅在Gen 2集合中收集其父集合时收集


这是正确的吗?如果是,原因是什么?

我想这是因为Gen 1对象是根对象/被Gen 2对象引用的,所以Gen 1对象在不再被引用之前无法被收集,当引用它的Gen 2对象被收集时,它将被收集。

但是Gen 2对象不是应用程序的根,就像线程堆栈上的全局和静态对象或局部变量/参数对象指针一样,不是吗?如果一个对象被另一个尚未收集的对象引用,则不会收集子对象本身,原因是显而易见的。如果父对象是无根的,您可能会认为子对象会被收集,但问题是GC还不知道这一点。如果它知道或者试图发现,那么它就不会是第1代的集合,而是第2代的集合。这就是它所做的,它等待第2代的出现。你说得对,但是第0代和第1代在相同的情况下呢?这本书的作者没有强调这一点