Сборка мусора

Обновлен: Ноябрь 2007

Сборщик мусора .NET Framework управляет выделением и освобождением памяти для приложения. При каждом создании объекта оператором newсреда выполнения выделяет память для объекта из управляемой динамически распределяемой памяти (кучи). Пока в управляемой куче имеется доступное адресное пространство, среда выполнения продолжает выделять пространство для новых объектов. Но память имеет пределы. В конечном счете, чтобы освободить некоторое количество памяти, сборщик мусора должен выполнить процедуру очистки. Механизм оптимизации сборщика мусора определяет наилучшее время для выполнения сбора, основываясь на произведенных выделениях памяти. В ходе выполнения очистки сборщик мусора отыскивает в управляемой куче объекты, которые более не используются приложением, и освобождает выделенную для них память.

В этом разделе описывается, как сборщик мусора автоматически управляет распределением и освобождением памяти для управляемых объектов приложения. Кроме того, здесь описывается рекомендуемый стандартный порядок разработки, которому можно следовать для правильной очистки любых неуправляемых ресурсов, создаваемых приложением.

0xy59wtx.alert_note(ru-ru,VS.90).gifПримечание.

В .NET Framework версии 1.0 среда CLR содержит отдельный диспетчер памяти для кучи больших объектов. В некоторых обстоятельствах этот диспетчер памяти не возвращает неиспользуемую память операционной системе, а в немногих случаях он не делает память доступной для сборки мусора. Это приводит к сбою выделения памяти по причине фрагментации виртуального адресного пространства. В .NET Framework версии 1.1 и 2.0 куча больших объектов состоит из непрерывных областей памяти, которые называются сегментами кучи, правильно скомпонованных для уменьшения фрагментации виртуальной памяти. Во время сборки мусора пространство, получаемое от больших объектов, консолидируется и помещается в список свободных объектов. Сегменты кучи, которые содержат только свободные элементы из списка, освобождаются, и память возвращается операционной системе. Эти изменения в поведении кучи больших объектов эффективно устранили проблемы, связанные с выделением памяти, которые были вызваны этой формой фрагментации виртуального адресного пространства.

0xy59wtx.alert_caution(ru-ru,VS.90).gifВажное примечание.

На серверах с более 2 ГБ памяти может оказаться необходимым указать переключатель /3GB в файле boot.ini во избежание видимых проблем, связанных с недостатком памяти, в то время как память доступна в системе.

В этом подразделе

Ссылка

  • System.GC
    Обеспечивает методы для взаимодействия с системным сборщиком мусора.

  • Object.Finalize
    Позволяет объекту сделать попытку освободить ресурсы и выполнить другие завершающие операции перед освобождением памяти объекта сборщиком мусора.

  • System.IDisposable
    Обеспечивает функциональные возможности для класса ресурсов.

Связанные подразделы