.NET - счетчики памяти

Материал из devopswiki
Перейти к: навигация, поиск

А сейчас мы расскажем о счётчиках, принадлежащих к разделу управления памятью CLR .NET Они предоставляют информацию о потреблении ресурсов памяти, пулах памяти и статистику сборки мусора.

Сборщик мусора общеязыковой исполняющей среды CLR управляет распределением и освобождением памяти для приложения. Это автоматическое управление памятью может устранять распространенные проблемы. Например, довольно часто забывают о необходимости освободить объект и, как следствие, вызывают утечку памяти, или же пытаются из объекта обратиться к тому участку памяти, который уже был освобожден.

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

Для оптимизации производительности работы сборщика мусора, управляемая куча разделена на три поколения: Gen 0, Gen 1 и Gen 2. Сборщик мусора исполняющей среды сохраняет новые объекты в Gen 0. Объекты, созданные в начале жизненного цикла приложения, которые «выживают» после сборки мусора, перемещаются дальше и хранятся в Gen 1 и Gen 2. Эта схема позволяет сборщику мусора освобождать память в определенном поколении быстрее, нежели полностью освобождать управляемую кучу каждый раз, когда выполняется сборка мусора.