Перейти к содержимому
2 / 15

Сборщик мусора Go: как он работает и откуда берутся паузы

Сборщик мусора в Go — параллельный и конкурентный, с трёхцветной маркировкой: почти вся работа идёт одновременно с выполнением программы. Полная остановка мира случается дважды за цикл и длится доли миллисекунды: в начале для включения барьера записи и в конце для завершения маркировки. Именно поэтому Go годится под задержки, где сборщики с длинными паузами требуют тонкой настройки. Но паузы — не вся история. Настоящая цена сборки в фоновой работе: маркировкой занимаются рабочие горутины, забирающие около четверти процессорного времени, а если программа выделяет память быстрее, чем идёт маркировка, включается ассист — аллоцирующая горутина сама начинает помогать сборщику, и это выглядит как необъяснимое замедление конкретных запросов. Отсюда практика: снижают не паузы, а частоту сборок и объём выделений. Начиная с Go 1.26 работает новый алгоритм маркировки Green Tea, улучшающий локальность и снижающий накладные расходы.