Cтраница 1
Сборщик мусора, требующий остановки программы на время своей работы, называется старт / стоп сборщиком; альтернативой ему является параллельный сборщик. [1]
Сборщик мусора - это часть CLR, которая выполняет автоматическое управление выделением и освобождением памяти. Когда не остается ни одной ссылки на объект, занимаемая им память освобождается. Эта же базовая идея лежит и в основе сборщика мусора CLR, однако сборщик мусора CLR является более совершенным механизмом. В частности, он может обнаружить ситуацию, когда два объекта ссылаются друг на друга, однако других ссылок на эти объекты не существует. [2]
Ленивые сборщики мусора на основе счетчиков ссылок максимально оттягивают время обработки структуры и производят это по частям, а не сразу. [3]
Если сборщик мусора нашел объекты, на которые нет ни одной ссылки, он пытается обратиться к процедуре финализации ( подготовки удаления) этих объектов. Финализация может осуществляться или деструкторами, о которых уже говорилось выше, или методом Finalize. NET, наследует метод Finalize. Сборщик мусора вызывает этот метод, когда собирается удалить объект. Это происходит в непредсказуемый момент времени, так как сборщик мусора работает асинхронно и удаляет объекты тогда, когда наступает переполнение памяти. [4]
Процессу сборщика мусора может быть послан запрос на обнаружение всех недостижимых объектов, входы которых могут быть затем помещены в список свободных блоков. Как мы уже говорили, новые блоки, добавляемые к списку свободных блоков, подсоединяются к уже имеющимся там соединенным блокам. [5]
Рассматриваемый здесь сборщик мусора является на самом деле неким обобщением предложенного Бэйкером сборщика. Их принципы, однако, по существу одинаковы. [6]
При запуске сборщика мусора последовательно проверяется каждое слово состояния. Если оно является указателем на ячейку кучи, то адресуемая им ячейка маркируется, что говорит о том, что она - активная ячейка. Этот процесс рекурсивно повторяется для головы и хвоста ячейки. [7]
![]() |
Взаимодействие ведущего и возвращающего указателей. [8] |
При работе сборщика мусора в фазе сборки предполагается, что все активные ячейки были предварительно отмечены указателями на них от слов состояния. [9]
При использовании сборщика мусора ( Garbage Collector, GC) вы можете создавать объекты, ссылающиеся друг на друга, а затем не беспокоиться об уничтожении этих объектов. [10]
Частота обращения к сборщику мусора зависит от вида выполняющихся программ. Так, выполняющиеся программы на языке Ада могут ( а программы, подобные программам на языке ЛИСП, определенно будут) приводить к интенсивному использованию сборщика мусора; при выполнении же смеси программ на языках Бейсик, Фортран и Кобол, напротив, сборщик мусора не будет использоваться вообще. Хотя взаимные влияния между тремя механизмами восстановления пространства определенно очень сложны, сам факт, что управление памятью может в любое данное время выбирать из этих трех, обеспечивает в принципе некоторую степень гибкости и создает благоприятную ситуацию для достижения уровней производительности, которые не обеспечены в большинстве ранее разработанных операционных систем. [11]
В рассмотренных нами сборщиках мусора поиск и обработка активных ячеек происходили в ходе процесса, логически отделенного от процесса пользователя. Сканирование кучи начинается от слов состояния и идет дальше по связывающим указателям. Существующая альтернатива подобной двухпро-цессной модели сборки мусора - это унифицированный подход, при котором статус ячеек непрерывно изменяется в ходе процесса пользователя. [12]
![]() |
Возможные виды организации кучи, основанной на списках. [13] |
Существуют три основных класса сборщиков мусора, а именно сканирующий сборщик, копирующий сборщик, а также сборщик, основанный на подсчете ссылок. Они описываются в разд. [14]
Существуют три основных класса сборщиков мусора: сканирующий, копирующий и сборщик на основе счетчиков ссылок. [15]