En informática, un montón gestionado es un esquema de gestión de la memoria del montón en el que el gestor de memoria realiza un seguimiento de todas las asignaciones y desasignaciones de memoria para garantizar que no se produzcan fugas de memoria. En algunos montículos gestionados, el gestor de memoria también puede compactar el montículo para reducir la fragmentación.
Las pilas gestionadas se utilizan a menudo en los lenguajes de programación gestionados, como Java y C#, que proporcionan una gestión automática de la memoria. El heap administrado suele ser gestionado por un recolector de basura, que periódicamente escanea el heap en busca de objetos que ya no son alcanzables por el programa y reclama su memoria.
¿Cuáles son los 3 tipos de memoria?
1. Memoria caché
2. Memoria principal
3. Memoria secundaria
¿Cómo funciona el recolector de basura c#?
El recolector de basura funciona escaneando periódicamente el heap gestionado en busca de objetos que ya no son referenciados por la aplicación y recuperando la memoria utilizada por esos objetos. Este proceso se conoce como recolección de basura.
El recolector de basura utiliza un algoritmo de barrido-compacto. Primero, marca todos los objetos que son accesibles desde las raíces (los campos estáticos de los tipos gestionados y los manejadores utilizados por el código no gestionado). A continuación, barre el montón y recupera todos los objetos que no están marcados. Finalmente, compacta el montón para minimizar la cantidad de memoria utilizada por la aplicación.
El recolector de basura está diseñado para no bloquearse, lo que significa que no detiene la ejecución de la aplicación mientras recolecta la basura. Sin embargo, puede suspender temporalmente la aplicación mientras está marcando y barriendo objetos.
¿Qué es el heap en memoria?
El heap es una sección de memoria que no es gestionada por el runtime. Esto contrasta con la memoria gestionada que el tiempo de ejecución controla, que incluye la pila y el heap gestionado. El montón no gestionado es utilizado por el tiempo de ejecución para almacenar objetos que no son controlados por el tiempo de ejecución, como los objetos COM.
¿Qué es un recurso no gestionado?
En el desarrollo de software, un recurso no gestionado es un recurso que no está bajo el control del entorno de código gestionado. Los recursos no gestionados son típicamente creados y gestionados por una biblioteca de código no gestionado, y accedidos por el código gestionado a través de una capa de interoperabilidad.
Algunos ejemplos de recursos no gestionados son:
- Objetos COM
- Manejadores Win32
- Buffer de memoria
- Archivos y streams
Cuando una aplicación de código gestionado termina de utilizar un recurso no gestionado, es importante limpiar y liberar adecuadamente el recurso, para evitar fugas de memoria y otros problemas.
¿Qué es la memoria heap? Un heap se refiere a una porción de memoria que el runtime no gestiona. El heap es diferente de la memoria gestionada, que el tiempo de ejecución gestiona. Esto incluye tanto la pila gestionada como el heap gestionado. El heap no gestionado es utilizado por el tiempo de ejecución para almacenar objetos que no son controlados por el tiempo de ejecución, como los objetos COM.