Can anyone explain me the CLR's "HighFrequencyHeap"?
The high frequency heap is used to store commonly used internal data structures such as the method table of types. This can be verified using WinDbg/SOS as shown below.
It is also stated in the SSCLI book (p. 235).
Here's part of the output for !eeheap
--------------------------------------
Domain 1: 006428c0
LowFrequencyHeap: 00340000(2000:2000) Size: 0x2000 (8192) bytes.
HighFrequencyHeap: 00342000(8000:2000) Size: 0x2000 (8192) bytes.
StubHeap: Size: 0x0 (0) bytes.
Virtual Call Stub Heap:
IndcellHeap: Size: 0x0 (0) bytes.
LookupHeap: Size: 0x0 (0) bytes.
ResolveHeap: Size: 0x0 (0) bytes.
DispatchHeap: Size: 0x0 (0) bytes.
CacheEntryHeap: Size: 0x0 (0) bytes.
Total size: Size: 0x4000 (16384) bytes.
--------------------------------------
Jit code heap:
LoaderCodeHeap: 004e0000(10000:1000) Size: 0x1000 (4096) bytes.
Total size: Size: 0x1000 (4096) bytes.
--------------------------------------
Module Thunk heaps:
Module 5ef21000: Size: 0x0 (0) bytes.
Module 00342e9c: Size: 0x0 (0) bytes.
Total size: Size: 0x0 (0) bytes.
--------------------------------------
Module Lookup Table heaps:
Module 5ef21000: Size: 0x0 (0) bytes.
Module 00342e9c: Size: 0x0 (0) bytes.
Total size: Size: 0x0 (0) bytes.
--------------------------------------
Total LoaderHeap size: Size: 0x13000 (77824) bytes.
=======================================
Number of GC Heaps: 1
generation 0 starts at 0x02521018
generation 1 starts at 0x0252100c
generation 2 starts at 0x02521000
ephemeral segment allocation context: none
segment begin allocated size
02520000 02521000 0252e010 0xd010(53264)
Large object heap starts at 0x03521000
segment begin allocated size
03520000 03521000 03523250 0x2250(8784)
Total Size: Size: 0xf260 (62048) bytes.
------------------------------
GC Heap Size: Size: 0xf260 (62048) bytes.
Notice the location of the high frequency heap and the garbage collected heaps. Here's the output for !dumpobject
for a statically allocated instance of Program
.
0:000> !dumpheap -type Program
Address MT Size
0252b630 00343858 12
total 0 objects
Statistics:
MT Count TotalSize Class Name
00343858 1 12 TestBench2010.Program
Total 1 objects
0:000> !do 0252b630
Name: TestBench2010.Program
MethodTable: 00343858
EEClass: 0034154c
Size: 12(0xc) bytes
File: C:\workspaces\TestBench2010\TestBench2010\bin\Debug\TestBench2010.exe
Fields:
MT Field Offset Type VT Attr Value Name
00343858 4000001 4 ...Bench2010.Program 0 static 0252b630 p
0:000> !dumpheap -type Program
Address MT Size
0252b630 00343858 12
total 0 objects
Statistics:
MT Count TotalSize Class Name
00343858 1 12 TestBench2010.Program
Total 1 objects
0:000> !do 0252b630
Name: TestBench2010.Program
MethodTable: 00343858
EEClass: 0034154c
Size: 12(0xc) bytes
File: C:\workspaces\TestBench2010\TestBench2010\bin\Debug\TestBench2010.exe
Fields:
MT Field Offset Type VT Attr Value Name
00343858 4000001 4 ...Bench2010.Program 0 static 0252b630 p
Notice the address for the static reference p
in the type Program
. It points to an address in the garbage collected heap. Also, notice the address of the Method Table. It points to an address in the high frequency heap.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With