我正在跟踪我正在使用的内存泄漏
!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
答案 0 :(得分:5)
没有root意味着对象无法访问。
当一个对象无法访问时,垃圾收集器会将该对象视为垃圾,并且可以被收集。
在其生命周期的某个时刻没有root的对象是正常的,实际上对于垃圾收集的工作方式至关重要。
参考文献: