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

Роль корневых элементов приложения

Обработка исключений | Void main () | Составляющие процесса обработки исключений в .NET | Генерация общего исключения | Перехват исключений | Создание специальных исключений, способ первый | Обработка нескольких исключений. | Блок finally | Время жизни объектов | Базовые сведения о времени жизни объектов |


Читайте также:
  1. V. ПРИЛОЖЕНИЯ
  2. VI ОБ ОСВЯЩЕНИИ ЭЛЕМЕНТОВ
  3. VIII О МИСТИЧЕСКОМ БРАКЕ И ПОГЛОЩЕНИИ ЭЛЕМЕНТОВ
  4. Азотсодержащие соединения р-элементов IV группы
  5. Баланс питательных веществ и коэффициенты их использования. Соотношение элементов питания в минеральных удобрениях.
  6. Балльные оценки для элементов контроля
  7. Буквенные коды наиболее распространенных видов элементов.

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

Строго говоря, корневыми могут называться элементы любой из перечисленных ниже категорий:

Ø Ссылки на глобальные объекты (хотя в С# они не разрешены, CIL-код позволяет размещать глобальные объекты).

Ø Ссылки на любые статические объекты или статические поля.

Ø Ссылки на локальные объекты в пределах кодовой базы приложения.

Ø Ссылки на передаваемые методу параметры объектов.

Ø Ссылки на объекты, ожидающие финализации (об этом подробно далее).

Ø Любые регистры центрального процессора, которые ссылаются на объект.

Во время процесса сборки мусора исполняющая среда будет исследовать объекты в управляемой куче, чтобы определить, являются ли они по-прежнему достижимыми (т.е. корневыми) для приложения. Для этого среда CLR будет создавать графы объектов, представляющие все достижимые для приложения объекты в куче (графы применяются для документирования всех достижимых объектов). Кроме того, следует иметь в виду, что сборщик мусора никогда не будет создавать граф для одного и того же объекта дважды, избегая необходимости выполнения подсчета циклических ссылок, который характерен для программирования в среде СОМ.

Чтобы увидеть все это на примере, предположим, что в управляемой куче содержится набор объектов с именами A,B,C,D,E,F,G. Во время сборки мусора эти объекты (а также любые внутренние объектные ссылки, которые они могут содержать) будут исследованы на предмет наличия у них активных корневых элементов.

После построения графа все недостижимые объекты (которыми в примере пусть будут объекты С и F) помечаются как являющиеся мусором. На рис. 3 показано, как примерно выглядит граф объектов в только что описанном сценарии (линии со стрелками следует воспринимать как "зависит от" или "требует"; например, "Е зависит от G и В", «А не зависит ни от чего" и т.д.).

 

После того как объект помечен для уничтожения (в данном случае это объекты С и F, поскольку в графе объектов они во внимание не принимаются), они будут удалены из памяти. Оставшееся пространство в куче будет после этого сжиматься до компактного состояния, что, в свою очередь, вынудит CLR изменить набор активных корневых элементов приложения (и лежащих в их основе указателей) так, чтобы они ссылались на правильное место в памяти (это делается автоматически и прозрачно). И, наконец, указатель на следующий объект тоже будет подстраиваться так, чтобы указывать на следующий доступный участок памяти. На рис. 4 показано, как выглядит конечный результат этих изменений в рассматриваемом сценарии.

 


Дата добавления: 2015-07-25; просмотров: 59 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
CIL-код, генерируемый для ключевого слова new| Поколения объектов

mybiblioteka.su - 2015-2024 год. (0.006 сек.)