Share via


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

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