我有一个内存转储文件。在这个转储文件中,我有一个具有句柄fd00000
的堆。以下是命令 !heap -s fd00000
的输出摘录:
0: Heap 0fd00000
Flags 00001002 - HEAP_GROWABLE
Reserved memory in segments 80192 (k)
Commited memory in segments 56540 (k)
Virtual bytes (correction for large UCR) 60592 (k)
Free space 3884 (k) (572 blocks)
External fragmentation 6% (572 free blocks)
Virtual address fragmentation 6% (69 uncommited ranges)
Virtual blocks 124 - total 0 KBytes
Lock contention 23
Segments 1
你会发现它按预期显示了摘要信息。但是,
!heap -stat -h 0fd00000
的输出结果如下: heap @ 0fd00000
group-by: TOTSIZE max-display: 20
size #blocks total ( %) (percent of total busy bytes)
19fa40 7a - c614280 (93.96)
62d30 4 - 18b4c0 (0.73)
d49 13d - 107365 (0.49)
这里涉及到的全部是十六进制,从这里我可以看出“总繁忙字节数”超过了205MB。因此,你会发现!heap -s
告诉我这个堆有80MB/60MB保留/虚拟内存,而!heap -stat
告诉我这个堆占用了205MB。 这样的差距是如此之大。这怎么可能?当我运行!heap -s
时,我会看到多个像这样的条目:
Virtual block: 293c0000 - 293c0000 (size 00000000)
也许这就是原因?