Роль корней приложения

Роль корней приложения

Теперь мы вернемся к вопросу о том, как сборщик мусора определяет, когда объект "больше не нужен". Чтобы понять это, необходимо рассмотреть понятие корней приложения. Упрощенно говоря, корень- это место в памяти со ссылкой на объект, размещенный в динамической памяти. Строго говоря, корень может относиться к любой из следующих категорий.

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

• Ссылки на используемый в настоящий момент статические объекты и поля.

• Ссылки на локальные объекты в пределах данного метода.

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

• Ссылки на объекты, ожидающие финализации (соответствующее понятие будет описано в этой главе позже).

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

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

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

На рис. 5.3 представлен возможный объектный граф для только что описанного сценария (направленные стрелки, связывающие объекты в таком графе, можно заменить словами "зависит от" или "требует", – например, "E зависит от G и косвенно от B", "A не зависит ни от чего" и т.д.).

Рис. 5.3. Объектные графы строятся для выявления объектов, достижимых из корней приложения

Если объекты помечены для уничтожения (в данном случае это C и F – они не включены в объектный граф), эти объекты удаляются из памяти. В этот момент оставшееся пространство в динамической памяти уплотняется, что в свою очередь заставляет среду CLR модифицировать множество корней активного приложения, чтобы они обеспечивали правильные ссылки на точки размещения в памяти (это делается автоматически и незаметно). Наконец, соответствующим образом изменяется указатель на следующий объект. На рис. 5.4 показан результат преобразований.

Рис. 5.4. "Чистая и компактная" динамическая память

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Компьютерная роль

Из книги Как справиться с компьютерной зависимостью автора Краснова С В

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


Роль языка C#

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Роль языка C# С учетом того, что принципы .NET так радикально отличаются от предшествующих технологий, Microsoft разработала новый язык программирования, C# (произносится "си-диез"), специально для использования с этой новой платформой. Язык C# является языком программирования, по


Роль директив CIL

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

Роль директив CIL Прежде всего, есть множество известных лексем CIL, которые используются для описания полной структуры компоновочного блока .NET. Эти лексемы называются директивами. Директивы CIL используются дли информирования компилятора CIL о том, как определять


Роль атрибутов CIL

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Роль атрибутов CIL Во многих случаях директивы CIL сами по себе оказываются недостаточно информативными, чтобы дать исчерпывающее определение соответствующего типа .NET или его члена. Поэтому многие директивы CIL сопровождаются различными атрибутами CIL, сообщающими о том,


Роль peverify.exe

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

Роль peverify.exe При создании или модификации компоновочных блоков, в которых используется программный код CIL, всегда целесообразно проверить, будет ли скомпилированный двоичный образ правильно сформирован с точки зрения правил .NET. Для этого можно использовать средство


Роль DataSet

Из книги Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform автора Кёртен Роб

Роль DataSet Упрощенно говоря, DataSet является представлением внешних данных в памяти. Более точно, DataSet представляет собой тип класса, поддерживающий три внутренние строго типизованные коллекции (рис. 22.11). Рис. 22.11. "Анатомия" DataSetСвойство Tables объекта DataSet позволяет получить


Роль HTTP

Из книги Продвижение порталов и интернет-магазинов автора Гроховский Леонид О.

Роль HTTP Web-приложения очень сильно отличаются от традиционных приложений для настольных систем. Первым очевидным отличием является то, что любое реальное Web-приложение предполагает использование, как минимум, двух соединенных в сеть, машин (конечно, при разработке


Роль HTML

Из книги Идеальный программист. Как стать профессионалом разработки ПО автора Мартин Роберт С.

Роль HTML Сконфигурировав каталог для своего Web-приложения, вы должны создать и его содержимое. Напомним, что Web-приложение - это просто термин используемый для обозначения множества файлов, обеспечивающих функционирование узла, Значительная часть этих файлов будет


Роль папки Bin

Из книги автора

Роль папки Bin Позже вы увидите, что Web-страницы ASP.NET в конечном счете компилируются в компоновочный блок .NET. Поэтому не должно быть неожиданностью то, что Web-узлы могут ссылаться на любое число приватных или общедоступных компоновочных блоков, В ASP.NET 2.0 метод указания


Роль классов

Из книги автора

Роль классов Затратив немного времени на устранение абсурдных, но распространенных и вредных заблуждений, можно вернуться к рассмотрению центральных свойств классов и выяснить, в частности, почему они столь важны в объектной технологии.Для понимания ОО-подхода


Роль типизации

Из книги автора

Роль типизации Зачем настаивать на явном объявлении типов (первое из двух требований)? Это часть главного вопроса о типизации, которому в этой книге посвящена отдельная лекция (лекция 17). Но уже сейчас можно указать две основные причины, по которым ОО-программа должна быть


5.19. Извлечение кубических корней, корней четвертой степени и т.д.

Из книги автора

5.19. Извлечение кубических корней, корней четвертой степени и т.д. В Ruby встроена функция извлечения квадратного корня (Math.sqrt), поскольку именно она применяется чаще всего. А если надо извлечь корень более высокой степени? Если вы еще не забыли математику, то эта задача не


Роль ядра

Из книги автора

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


Роль PR-специалиста

Из книги автора

Роль PR-специалиста Описывая структуру управления порталом, я намеренно не упомянул PR-отдел. Дело в том, что порталу на этапе создания и продвижения не нужен целый отдел, занимающийся офлайновой рекламой и внешними связями, а специалист по SMM отлично встраивается в отдел


Роль разработчика

Из книги автора

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