Выбор ответа Senior Память, GC и pprof обновлено
Зачем write barrier в GC Go
Вопрос
Зачем во время маркировки включается write barrier?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Чтобы программа не спрятала живой белый объект за чёрным. При конкурентной маркировке программа продолжает работать и может записать указатель на ещё белый объект в чёрный и удалить другую ссылку на него.
Варианты ответа
- Чтобы программа не спрятала живой белый объект за чёрнымправильный ответ
- Чтобы запретить запись в кучу на время фазы маркировки
- Чтобы перемещать объекты при уплотнении кучи после сборки
- Чтобы вести счётчики ссылок на объекты во время сборки
Разбор
При конкурентной маркировке программа продолжает работать и может записать указатель на ещё белый объект в чёрный и удалить другую ссылку на него. Без барьера GC освободил бы живой объект. Go использует гибридный барьер (Юасы плюс Дейкстры), который красит затронутые объекты в серый. Запись не запрещается, объекты не перемещаются, счётчиков ссылок нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Память, GC и pprof»
- Пул объектов как sync.Pool: симуляция на Go
- Статистика потока чисел без хранения на Go
- Escape analysis: что попадёт в кучу
- Как работает сборщик мусора Go
- Какой сборщик мусора в Go
- Как посмотреть решения escape analysis
- Что значит GOGC=100
- GOMEMLIMIT в контейнере