.net 我对dumpheap和gcroot的理解是否不正确

.net 我对dumpheap和gcroot的理解是否不正确,.net,garbage-collection,windbg,sos,.net,Garbage Collection,Windbg,Sos,我的理解是!dumpheap命令列出.NET堆中所有未进行垃圾收集的对象。如果我跑的话!针对对象地址(通过!dumpheap-mt XXX找到)的gcroot命令,它应该始终为我提供引用该对象的堆栈跟踪。然而,我发现我找不到中列出的对象的根的例子!垃圾堆。是我的理解!垃圾堆和垃圾堆!gcroot不正确?如果你想看一些例子,可以在我的另一个问题中找到!dumpheap列出托管堆上的所有对象。其中一些可能符合GC条件(即,它们不是根目录)。最新版本的SOS具有-live和-dead标志,专门列出此时

我的理解是!dumpheap命令列出.NET堆中所有未进行垃圾收集的对象。如果我跑的话!针对对象地址(通过!dumpheap-mt XXX找到)的gcroot命令,它应该始终为我提供引用该对象的堆栈跟踪。然而,我发现我找不到中列出的对象的根的例子!垃圾堆。是我的理解!垃圾堆和垃圾堆!gcroot不正确?如果你想看一些例子,可以在我的另一个问题中找到!dumpheap列出托管堆上的所有对象。其中一些可能符合GC条件(即,它们不是根目录)。最新版本的SOS具有
-live
-dead
标志,专门列出此时可以回收或无法回收的对象

同样地,
!dumpheap
还列出了“空闲”对象,这些对象是托管堆中尚未压缩的区域。样本输出:

73113f80        1           84 System.Exception
008c4cb8        8           96      Free                <--- can be compacted at some point
731142a8        1          112 System.AppDomain
731169a4        1          132 System.Globalization.NumberFormatInfo
731162dc        2          144 System.Globalization.CultureInfo
731141a0        2          168 System.Threading.ThreadAbortException
73116d54        2          280 System.Byte[]
73117684        3          468     System.Collections.Generic.Dictionary`2+Entry[[System.Type, mscorlib],    [System.Security.Policy.EvidenceTypeDescriptor, mscorlib]][]
731155f4       11          564 System.Int32[]
73116518        2          616 System.Globalization.CultureData
731147f8        4          718 System.Char[]
73115020       26          728 System.RuntimeType
73113e38      164         5502 System.String
730d0cdc       26        18152 System.Object[]
73113f80 1 84系统。异常

008c4cb8 8 96免费你能给我举个例子吗!转储堆,但不会列出任何引用!我不知道你在问什么。是否要查看
的输出!gcroot
如果某个对象没有根,我对您答案中的#2感兴趣,它是自由对象,但尚未压缩。这些对象在任何地方都没有引用,应该从.net堆中删除?它们只是列在名称“Free”下。它们本身不是托管对象,只是可用于分配的托管堆区域。