当一个对象没有使用root时,它意味着什么!带有SOS的gcroot?

时间:2011-06-04 01:50:20

标签: c# windbg sos

我正在跟踪我正在使用的内存泄漏

!dumpheap -stat !dumpheap -mt !gcroot

然而!gcroot没有显示任何内容,我一直在想这意味着该对象没有参考但尚未收集。但我并非100%自信。

0:018> !dumpheap -mt 000007fee15f0bb0     
         Address               MT     Size
000000001c87b570 000007fee15f0bb0  3145752     
000000001cb7b588 000007fee15f0bb0  3145752     
000000001e9675a8 000007fee15f0bb0  3145752     
000000001ec675c0 000007fee15f0bb0  3145752   


0:018> !gcroot 000000001ec675c0 
Note: Roots found on stacks may be false positives. Run "!help gcroot" for
more info.
Scan Thread 0 OSTHread 1eb4
Scan Thread 2 OSTHread 1c60
Scan Thread 4 OSTHread 1370
Scan Thread 6 OSTHread d5c
Scan Thread 7 OSTHread 740
Scan Thread 10 OSTHread 40c
Scan Thread 14 OSTHread 20d4
Scan Thread 15 OSTHread 398
Scan Thread 16 OSTHread 214c
Scan Thread 17 OSTHread 2538

1 个答案:

答案 0 :(得分:5)

没有root意味着对象无法访问。

当一个对象无法访问时,垃圾收集器会将该对象视为垃圾,并且可以被收集。

在其生命周期的某个时刻没有root的对象是正常的,实际上对于垃圾收集的工作方式至关重要。

参考文献: