Выбор ответа Senior Память, GC и pprof обновлено

Зачем write barrier в GC Go

Вопрос

Зачем во время маркировки включается write barrier?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Чтобы программа не спрятала живой белый объект за чёрным. При конкурентной маркировке программа продолжает работать и может записать указатель на ещё белый объект в чёрный и удалить другую ссылку на него.

Варианты ответа

  1. Чтобы программа не спрятала живой белый объект за чёрнымправильный ответ
  2. Чтобы запретить запись в кучу на время фазы маркировки
  3. Чтобы перемещать объекты при уплотнении кучи после сборки
  4. Чтобы вести счётчики ссылок на объекты во время сборки

Разбор

При конкурентной маркировке программа продолжает работать и может записать указатель на ещё белый объект в чёрный и удалить другую ссылку на него. Без барьера GC освободил бы живой объект. Go использует гибридный барьер (Юасы плюс Дейкстры), который красит затронутые объекты в серый. Запись не запрещается, объекты не перемещаются, счётчиков ссылок нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.