Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

what does it mean when an object has no root using !gcroot with SOS?

Tags:

c#

windbg

sos

I'm tracking a memory leak where I'm using

!dumpheap -stat !dumpheap -mt !gcroot

however !gcroot doesnt show anything, I've been thinking this means the object has no refs but hasnt been collected. but I'm not 100% confident.

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
like image 908
stuck Avatar asked Jun 04 '11 01:06

stuck


1 Answers

Having no root means an object is unreachable.

When an object is not reachable, the garbage collector considers the object garbage, and can be collected.

An object having no root at some point in its lifetime is a normal occurance, in fact essential as to how garbage collection works.

Refs:

  • Garbage Collection: Automatic Memory Management in the Microsoft .NET Framework

  • Garbage Collection

  • Garbage Collector Basics and Performance Hints

like image 87
Mitch Wheat Avatar answered Sep 28 '22 06:09

Mitch Wheat