Сборка мусора
Обновлен: Ноябрь 2007
Сборщик мусора .NET Framework управляет выделением и освобождением памяти для приложения. При каждом создании объекта оператором newсреда выполнения выделяет память для объекта из управляемой динамически распределяемой памяти (кучи). Пока в управляемой куче имеется доступное адресное пространство, среда выполнения продолжает выделять пространство для новых объектов. Но память имеет пределы. В конечном счете, чтобы освободить некоторое количество памяти, сборщик мусора должен выполнить процедуру очистки. Механизм оптимизации сборщика мусора определяет наилучшее время для выполнения сбора, основываясь на произведенных выделениях памяти. В ходе выполнения очистки сборщик мусора отыскивает в управляемой куче объекты, которые более не используются приложением, и освобождает выделенную для них память.
В этом разделе описывается, как сборщик мусора автоматически управляет распределением и освобождением памяти для управляемых объектов приложения. Кроме того, здесь описывается рекомендуемый стандартный порядок разработки, которому можно следовать для правильной очистки любых неуправляемых ресурсов, создаваемых приложением.
![]() |
---|
В .NET Framework версии 1.0 среда CLR содержит отдельный диспетчер памяти для кучи больших объектов. В некоторых обстоятельствах этот диспетчер памяти не возвращает неиспользуемую память операционной системе, а в немногих случаях он не делает память доступной для сборки мусора. Это приводит к сбою выделения памяти по причине фрагментации виртуального адресного пространства. В .NET Framework версии 1.1 и 2.0 куча больших объектов состоит из непрерывных областей памяти, которые называются сегментами кучи, правильно скомпонованных для уменьшения фрагментации виртуальной памяти. Во время сборки мусора пространство, получаемое от больших объектов, консолидируется и помещается в список свободных объектов. Сегменты кучи, которые содержат только свободные элементы из списка, освобождаются, и память возвращается операционной системе. Эти изменения в поведении кучи больших объектов эффективно устранили проблемы, связанные с выделением памяти, которые были вызваны этой формой фрагментации виртуального адресного пространства. |
![]() |
---|
На серверах с более 2 ГБ памяти может оказаться необходимым указать переключатель /3GB в файле boot.ini во избежание видимых проблем, связанных с недостатком памяти, в то время как память доступна в системе. |
В этом подразделе
Применение опыта разработки в управлении памятью
Этапы подготовки, которые должны проделать разработчики, обычно работающие с Visual Basic, C++ и COM, при переходе к управляемому программному коду.Методы "Finalize" и деструкторы
Выполнение объектом с помощью методов Finalize и деструкторов необходимых операций очистки перед автоматическим освобождением памяти объекта сборщиком мусора.Слабые ссылки
Описание функциональных возможностей, которые позволяют сборщику мусора обрабатывать объект, разрешая при этом приложению получать доступ к этому объекту.Индуцированные коллекции
Описание способа немедленного освобождения объекта или освобождения его при первой возможности.Режимы задержки
Описание режимов, которые определяют степень вмешательства сборщика мусора.Оптимизация совместного размещения веб-узлов
Описание способов оптимизации сборки мусора на серверах, на которых совместно размещены несколько небольших веб-узлов.Уведомления о сборке мусора
Описание методов, позволяющих определить приближение и завершение полной сборки мусора.Очистка неуправляемых ресурсов
Рекомендуемые шаги разработки для очистки неуправляемых ресурсов.
Ссылка
System.GC
Обеспечивает методы для взаимодействия с системным сборщиком мусора.Object.Finalize
Позволяет объекту сделать попытку освободить ресурсы и выполнить другие завершающие операции перед освобождением памяти объекта сборщиком мусора.System.IDisposable
Обеспечивает функциональные возможности для класса ресурсов.
Связанные подразделы
- Пример Garbage Collection Technology
Представляет функциональные возможности сборщика мусора .NET Framework.