¿Alguien me puede explicar el "HighFrequencyHeap" de CLR?High Frequency Heap
Respuesta
Cada variable estática se almacena en el montón, independientemente de si se trata de declarada dentro de un tipo de referencia o un tipo valor. Solo hay una ranura en total sin importar cuántas instancias se creen . (No es necesario que haya instancias creadas para esa ranura a existe). Tenga en cuenta que este montón es separado de la basura normal montón acumulado: se lo conoce como "alto montón de frecuencia", y hay uno por dominio de aplicación .
Robo de here.
El montón de alta frecuencia se utiliza para almacenar estructuras de datos internas comúnmente utilizadas, como la tabla de tipos de métodos. Esto se puede verificar utilizando WinDbg/SOS como se muestra a continuación.
También se indica en el SSCLI book (p.235).
Aquí es parte de la salida para !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.
Aviso la ubicación del montón alta frecuencia y los montones de basura recogida. Aquí está la salida para !dumpobject
para una instancia estáticamente asignada de 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
anuncio la dirección de la referencia estática p
en el tipo Program
. Apunta a una dirección en el montón recogido de basura. Además, observe la dirección de la Tabla de métodos. Apunta a una dirección en el montón de alta frecuencia.
Hay una buena visión general de los diversos "montones de cargadores", de los cuales el montón de alta frecuencia es un ejemplo, en este excellent MSDN article on .Net runtime internals.
A partir de ese artículo:
artefactos se accede con frecuencia como MethodTables, MethodDescs, FieldDescs, y mapas de interfaz quedan asignados sobre una HighFrequencyHeap, mientras que las estructuras menos frecuentemente visitada de datos, como EEClass y cargador de clases y sus tablas de búsqueda, obtener asignado en un LowFrequencyHeap. StubHeap aloja stubs que facilitan la seguridad de acceso de código (CAS), llamadas de contenedor COM y P/Invoke.
El enlace está muerto: - \ – Vlad
Ugh, ¿por qué la EM puede tratar las URL de los artículos como deberían tratarse, como recursos permanentes. ¿Alguna vez aprenderán? Corregido gracias a Internet Archive. Por favor considere una donación! www.archive.org – codekaizen
O tal vez [esto] (http://download.microsoft.com/download/3/a/7/3a7fa450-1f33-41f7-9e6d-3aa95b5a6aea/MSDNMagazineMay2005en-us.chm) (advertencia:. chm adentro). – Vlad
El punto del montón de alta frecuencia es que los objetos a los que se accederá con frecuencia se almacenan cerca el uno del otro. Esto minimiza el conjunto de trabajo del proceso.
Esto realmente no suena correcto, en términos de CLR, de todos modos. – codekaizen
codekaizen: ¿Qué parte de eso no suena correcto? – Gabe
- 1. MS chart radar axis frequency
- 2. Python High Performance Computing
- 3. Real Time/High Resolution Stock API?
- 4. High-End 2D Java (SE) Graphics Library
- 5. JVM - Heap and Stack
- 6. Android Understanding Heap Sizes
- 7. Android Heap memory increase
- 8. Applet: Java heap space
- 9. problemas de memoria Heap
- 10. C++ Heap Corruption
- 11. PriorityQueue/Heap Update
- 12. Android Heap Fragmentation Strategy?
- 13. AppDomains y GC Heap
- 14. constantPoolClass en Java Heap?
- 15. Threading Heap and Stack
- 16. ¿Cómo funcionan los Coeficientes de Mel Frequency Cepstrum?
- 17. Android grow heap frag case
- 18. Memorystream y Large Object Heap
- 19. Perm espacio vs Heap space
- 20. Large Object Heap friendly IDictionary
- 21. Java.lang.OutOfMemory Java Heap Space JDeveloper
- 22. Cualquier diferencia entre First Class Function y High Order Function
- 23. High Runtime for Dictionary.Add para una gran cantidad de elementos
- 24. ¿Qué son los filtros High-Pass y Low-Pass?
- 25. Java Heap space Xmx Xms parámetros ignorados
- 26. C# structs/classes stack/heap control?
- 27. Heap vs Stack vs Perm Space
- 28. Error de Java Heap Space en glassfish
- 29. C# - ¿Es posible Iterar GC Heap?
- 30. Java Heap Space - ¿Cómo funciona -Xmx exactamente?
¿quiere decir que el recolector de basura no está trabajando con variables estáticas? Entonces, ¿cómo puede disponer de la memoria? – Vikram
Entonces, ¿qué es la diferencia entre la clase estática y las variables estáticas o el método? – Vikram
El objetivo de las variables estáticas es que existen durante el ciclo de vida del dominio de aplicación, por lo que, por definición, nunca se recolectarán como basura, al menos no hasta que finalice el dominio/proceso de aplicación. En cuanto a las diferentes clases estáticas, métodos estáticos y variables estáticas, son completamente diferentes y la diferencia es C# 101.Las variables estáticas son de "nivel de clase": se crea una instancia de la variable en el dominio de la aplicación, con el alcance correspondiente a la clase en la que se encuentra. Los métodos estáticos son métodos de una clase que no necesitan ser invocados en una instancia; básicamente son funciones globales. –