Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Сборщик мусора .NET Framework






Жизненный цикл ресурса в.NET Framework

1. Выделить память для типа, представляющего ресурс, вызвав команду newobj промежуточного языка, которая генерируется при использовании оператора new в С#.

Инициализировать выделенную память, установив начальное состояние ресурса и сделав его пригодным к использованию. За установку начального состояния типа отвечает его конструктор.

Использовать ресурс, обращаясь к членам его типа (при необходимости операция может повторяться).

В рамках процедуры очистки ликвидировать состояние ресурса

Освободить память. За этот этап отвечает исключительно сборщик мусора.

Управляемые ресурсы.NET Framework

В.NET существует два типа ресурсов: управляемые и неуправляемые. Причем отличить их довольно просто: к неуправляемым ресурсам относятся только «сырые» ресурсы, типа IntPtr, сырые дескрипторы сокетов или что-то в этом духе; если же с помощью идиомы RAII этот ресурс упаковали в объект, захватывающий его в конструкторе и освобождающий в методе Dispose, то такой ресурс уже является управляемым. По сути, управляемые ресурсы – это «умные оболочки» для неуправляемых ресурсов, для освобождения которых не нужно вызывать какие-то хитроумные функции, а достаточно вызвать метод Dispose интерфейса IDisposable.

Управляемые ресурсы располагаются в управляемой куче. Разработчику из управляемой кучи удалять объекты не нужно. Став ненужными приложению, они удаляются автоматически.

 

Сборщик мусора.NET Framework

Сборка мусора (garbage collection) полностью освобождает разработчика от необходимости следить за использованием и своевременным освобождением памяти. Однако сборщик мусора ничего не знает о ресурсе, представленном типом в памяти, а значит, не может знать, как корректно ликвидировать состояние ресурса. Для должной очистки ресурса разработчику нужно написать код, умеющий правильно выполнить очистку. Этот код следует поместить в метод финализации, а также в методы Dispose и Close

Сборщик мусора проверяет наличие в куче больше не используемых приложением объектов, чтобы освободить занятую ими память (если даже после сборки мусора в куче не оказывается свободной памяти, оператор new вбрасывает исключение OutOfMemoryException). Откуда сборщик знает, используется объект приложеннем или нет? Это не такой-то простой вопрос.

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

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

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.