Алгоритм выполняется в два этапа. На первом этапе все объекты в хип-области устанавливаются в начальное, немаркированное состояние. Затем все объекты, к которым прямо или косвенно обращаются программные переменные, помечаются как используемые (in-use). На втором этапе вся выделенная память сканируется (образно говоря, "подметается") и все непомеченные элементы освобождаются. У алгоритма маркировки и чистки есть два главных достоинства. Во-первых, он легко справляется с циклическими ссылками. Во-вторых, он фактически не вносит потерь сверх расходов на непосредственное выполнение сбора мусора. Назовем и два главных недостатка. Первый — существенное время может быть потрачено на сбор мусора, потому что должна сканироваться вся хип-область, поэтому при сборе мусора возможны неприемлемые показатели исполнения некоторых программ. Второй — хотя маркировка и чистка — теоретически простой алгоритм, его эффективная реализация может быть сложной.
|