【问题标题】:How are CLR GC heaps mapped to native heaps?CLR GC 堆如何映射到本机堆?
【发布时间】:2012-07-03 07:53:32
【问题描述】:

例如,如果我发现其中一些堆非常大,我的下一个问题是谁(本机代码或托管代码)使用它们。 如何确定 CLR 用于其目的的本机堆 (!heap -s)?

【问题讨论】:

    标签: memory garbage-collection clr heap-memory windbg


    【解决方案1】:

    CLR 不使用任何本机堆。 使用 SOS 和 !DumpHeap 查看托管堆。

    这里是link,用于查找谁在使用本机堆。

    DebugDiag 1.1 在查找谁在使用哪个本机堆方面取得了一些不错的结果。

    编辑: 虽然 VirtualAlloc 用于为本机堆分配内存,但 !CLRUsage 显示还使用了本机堆。不过不知道目的。

    0:000> !CLRUsage
    Native Heap for mscorwks: 0x07e60000
    Number of GC Heaps: 1
    ------------------------------
    GC Heap Size  0xbc7dd4(12,352,980)
    Total Commit Size  00e22000 (14 MB)
    Total Reserved Size  0225e000 (34 MB)
    Initial reservation type: All at once
    Initial Allocation Size: 2000000 (33,554,432) (32 MB)
    Reserved Memory Size: 3000000 (50,331,648) (48 MB)
    Reserved Memory Limit Size: 3000000 (50,331,648) (48 MB)
    

    【讨论】:

      【解决方案2】:

      CLR 使用 VirtualAlloc 分配内存段以用作托管堆。您可以使用 !sos.eeheap -gc 检查这些段。 !sos.dumpheap -stat 将显示托管堆正在使用多少内存,以及哪些类型的对象正在消耗内存。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-08
        • 1970-01-01
        • 1970-01-01
        • 2016-12-01
        • 2022-07-15
        • 2012-07-29
        相关资源
        最近更新 更多