К сожалению, существует много небрежного использования терминологии, связанной с сборкой мусора, что вызывает много путаницы.«Распорщик» или «финализатор» фактически не уничтожает объект, а скорее служит для задержки уничтожения объекта, который в противном случае будет иметь право на уничтожение до тех пор, пока он невозможность навести порядок в своих делах (то есть, как правило, сообщая другим людям, что их услуги больше не нужны).
Проще всего думать о сборщике мусора "останови мир", как о выполнении следующих шагов:по порядку:
- Уберите все элементы, которые являются достаточно новыми, чтобы их можно было считать "мусором".
- Посетите каждый корень сборки мусора (т. Е. Объект, который по своей природе является «живым»), и, если он еще не скопирован, скопируйте его в новую кучу, обновите ссылку, чтобы указать на новый объект, и и посетитевсе элементы, на которые он содержит ссылки (которые будут копировать их, если они не были скопированы).Если кто-то посещает элемент в старой куче, который был скопирован, просто обновите ссылку, которая использовалась для его просмотра.
- Изучите каждый предмет, который зарегистрирован для финализации.Если он еще не скопирован, отмените его регистрацию для завершения, но добавьте ссылку на него в список объектов, которые необходимо завершить как можно быстрее.
- Элементы в списке немедленного завершения считаются «живыми», но, поскольку они еще не были скопированы, посетите каждый элемент в этом списке и, если еще не скопировано, скопируйте его в новую кучу и посетите все элементына что он содержит ссылки.
- Оставьте старую кучу, так как никто больше не будет ссылаться на нее.
Интересно отметить, что в то время как некоторые другие системы сбора мусора работают с использованием двойных косвенных указателей для ссылок, сборщик мусора .net (по крайней мере, обычный "остановите мир") использует прямые указатели.Это несколько увеличивает объем работы, которую должен выполнять сборщик, но повышает эффективность кода, который манипулирует объектами.Поскольку большинство программ тратят больше времени на манипулирование объектами, чем на сбор мусора, это чистый выигрыш.