Recolección de elementos no utilizados
Actualización: noviembre 2007
El recolector de elementos no utilizados de .NET Framework administra la asignación y liberación de la memoria de la aplicación. Cada vez que se utiliza el operador newnew para crear un objeto, el motor en tiempo de ejecución asigna al objeto memoria del montón administrado. Siempre que haya espacio de direcciones disponible en el montón nativo, el motor en tiempo de ejecución continúa asignando espacio a los objetos nuevos. No obstante, la memoria no es infinita. En ocasiones, el recolector de elementos no utilizados debe realizar una recolección para liberar alguna memoria. El motor de optimización del recolector de elementos no utilizados determina cuál es el mejor momento para realizar una recolección, según las asignaciones que se estén realizando. Cuando el recolector de elementos no utilizados realiza una recolección, comprueba si en el montón administrado hay objetos que la aplicación ya no utiliza y realiza las operaciones necesarias para reclamar su memoria.
En esta sección se describe cómo el recolector de elementos no utilizado administra automáticamente la asignación y liberación de la memoria de los objetos administrados en la aplicación. Además, describe el patrón de diseño recomendado que se debe utilizar para limpiar correctamente los recursos no administrados que la aplicación crea.
Nota: |
---|
En la versión 1.0 de .NET Framework, Common Language Runtime (CLR) tiene un administrador de memoria independiente para el montón de objetos grandes. En algunas circunstancias, este administrador de memoria no devuelve al sistema operativo la memoria no utilizada y, en muy pocos casos, no pone la memoria a disposición de la recolección de elementos no utilizados. Esto tiene como resultado la incapacidad de asignar memoria debido a la fragmentación del espacio de direcciones virtual. En las versiones 1.1 y 2.0 de .NET Framework, el montón de objetos grandes se compone de áreas de memoria contiguas denominadas segmentos de montón, correctamente alineadas para minimizar la fragmentación de memoria virtual. Durante la recolección de elementos no utilizados, se consolida el espacio reclamado de los objetos grandes y se coloca en una lista libre. Se liberan los segmentos de montón que sólo contienen elementos de lista libre y se devuelve la memoria al sistema operativo. Estos cambios realizados en el montón de objetos grandes han eliminado eficazmente los errores de asignación de memoria causados por la fragmentación del espacio de direcciones virtual. |
Nota importante: |
---|
En servidores con más de 2 GB de memoria, puede ser necesario especificar el modificador /3GB en el archivo boot.ini para evitar aparentes problemas de falta de memoria mientras que sigue habiendo memoria disponible en el sistema. |
En esta sección
Tareas del programador en la administración de la memoria
Describe los ajustes que deben realizar los desarrolladores que normalmente utilizan Visual Basic, C++ y COM cuando cambian a código administrado.Métodos de finalización y destructores
Describe cómo los destructores y métodos Finalize permiten que un objeto realice las operaciones de limpieza necesarias antes de que el recolector de elementos no utilizados reclame automáticamente la memoria del objeto.Referencias parciales
Describe las características que permiten al recolector de elementos no utilizados recoger un objeto y, mientras tanto, permitir que la aplicación tenga acceso a ese objeto.Colecciones inducidas
Describe cómo reclamar los objetos inmediatamente o en un momento posterior adecuado.Modos de latencia
Describe los modos que determinan la tendencia a la intrusión de la recolección de elementos no utilizados.Optimización de hospedaje web compartido
Describe cómo optimizar la recolección de elementos no utilizados en servidores compartidos mediante el hospedaje de varios sitios web pequeños.Notificaciones de recolección de elementos no utilizados
Describe cómo se determina cuándo una recolección completa de elementos no utilizados está próxima y cuándo se ha completado.Limpiar recursos no administrados
Describe el patrón de diseño recomendado para limpiar los recursos no administrados.
Referencia
System.GC
Proporciona métodos para interactuar con el recolector de elementos no utilizados del sistema.Object.Finalize
Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de que el objeto sea reclamado por el recolector de elementos no utilizados.System.IDisposable
Proporciona la funcionalidad de una clase de recursos.
Secciones relacionadas
- Ejemplo Garbage Collection Technology
Presenta la funcionalidad del recolector de elementos no utilizados de .NET Framework.