Сборщик мусора в основном работает, копируя все объекты, которые он может найти, в новую часть ОЗУ, а затем сбрасывая ядра в старой области; он не знает и не заботится, осталось ли пять или 500 000 объектов. Обратите внимание, что в дополнение к поиску всех объектов, на которые ссылаются живые сильные ссылки, сборщик мусора может также найти несколько других объектов, включая объекты, которые переопределяют Finalize
, объекты, используемые в качестве блокировок монитора, объекты, на которые нацелены объекты WeakReference, и т. Д. Перед убрав старую область с орбиты, сборщик мусора должен иметь дело с любыми «специальными» объектами, о которых он знает, которые все еще могут там находиться.
Помимо прочего, сборщик мусора имеет список всех объектов, которые зарегистрировали финализатор; он проверит все объекты в этом списке, чтобы увидеть, были ли они скопированы в новую область памяти. Если найдены какие-либо объекты, которых не было, они будут удалены из списка объектов с зарегистрированным финализатором и добавлены в список объектов, чей метод Finalize
должен быть запущен как можно скорее. Как только это будет сделано для всех объектов с зарегистрированным финализатором, любые объекты в списке объектов, нуждающихся в немедленной финализации, а также любой объект, на который эти объекты ссылаются, будут скопированы в новую область.