Sobes.tech
Назад к вопросам
Senior
5

Что происходит с новыми объектами, создаваемыми во время работы GC? Для чего нужен write barrier?

Компании, где спрашивали
Lenta Tech

Ответ от нейросети

sobes.tech AI

В Go новые объекты, создаваемые во время работы сборщика мусора (GC), обычно размещаются в молодом поколении (young generation) кучи. GC в Go использует алгоритм триггерного копирования и помечания с последующим удалением, где объекты, пережившие несколько циклов сборки, могут продвигаться в старшее поколение.

Write barrier — это механизм, который отслеживает изменения ссылок на объекты в памяти во время работы GC. Он нужен для поддержания корректности инвариантов сборщика мусора, особенно в условиях конкурентного выполнения программы и параллельного GC. Write barrier позволяет GC узнавать о новых ссылках, которые могли появиться после начала фазы пометки, чтобы не пропустить живые объекты и избежать удаления нужных данных.

Примерно это работает так: при записи указателя в поле объекта вызывается write barrier, который регистрирует эту операцию, обеспечивая, что GC учтет новую ссылку при сборке.

// Псевдокод write barrier
func writeBarrier(dst *ObjectField, src *Object) {
    // регистрируем изменение для GC
    gcRecordWrite(dst, src)
    // выполняем запись
    *dst = src
}