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

本文关键字:什么 意味着 带有 SOS gcroot 一个对象 | 更新日期: 2023-09-27 17:58:19

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

dumpeap-stat!dumpeap-mt!gcroot

然而!gcroot没有显示任何内容,我一直认为这意味着该对象没有引用,但尚未被收集。但我不是百分之百有信心。

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

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

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

当对象不可访问时,垃圾收集器会将该对象视为垃圾,并且可以进行收集。

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

参考:

  • 垃圾回收:Microsoft.NET Framework 中的自动内存管理

  • 垃圾收集

  • 垃圾回收器基础知识和性能提示