При сборке сборщик мусора копирует все живые объекты в другое пространство памяти, тем самым отбрасывая все объекты мусора в процессе. Прямой указатель на скопированный объект в новом пространстве устанавливается в «старую» версию объекта, чтобы гарантировать, что сборщик правильно обновляет все оставшиеся ссылки на объект и не копирует один и тот же объект дважды по ошибке.
Это, очевидно, очень хорошо работает для коллекционеров, останавливающих мир. Однако, поскольку время паузы для Stop-the-world слишком велико, в настоящее время большинство сборщиков мусора позволяют потокам-мутаторам работать одновременно со сборщиком, останавливая мутаторы только на короткое время для выполнения начального сканирования стека.
Итак, как сборщик может гарантировать, что мутатор не получит доступ к «старой» версии объекта во время / после ее копирования? Я предполагаю, что мутаторы могут проверять указатель вперед с каким-то барьером чтения, однако это кажется мне дорогостоящим, поскольку переменные читаются так часто.