Как GC помечает недоступный объект, поскольку он уже недоступен
Недоступные объекты не помечены.
Идея состоит в том, что процесс маркировкипосещает все доступные объекты и ставит отметку на каждом найденном объекте. Затем фаза очистки избавляется от объектов, которые НЕ помечены.
Так как же GC находит объекты, которые не были помечены?
Ну, все объекты имеют блок заголовка, который включаетотметка бит и другие вещи, а также размер объекта. Объекты хранятся последовательно в памяти. Поэтому, если у вас есть адрес первого объекта, вам просто нужно добавить размер объекта и размер заголовка к этому адресу ... и у вас есть адрес следующего объекта.
Это то, что делает уборщик. Он просматривает все объекты, проверяя, отмечены ли они или нет. Объекты, которые не отмечены, затем удаляются.
(я много упрощаю ...)