Как в Go работает гарбич-коллектор?

Пользователь

от aaliyah.greenfelder , в категории: Вопросы от знатоков , 6 месяцев назад

Как в Go работает гарбич-коллектор?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket

1 ответ

Пользователь

от modesta , 6 месяцев назад

@aaliyah.greenfelder 

В Go существует автоматический механизм сборки мусора (garbage collector, GC), который следит за выделенной памятью и удаляет неиспользуемые объекты. GC в Go основан на алгоритме "stop-the-world", который останавливает выполнение программы на время сборки мусора. В процессе сборки мусора GC ищет объекты, на которые нет ссылок из других объектов, и освобождает память, занимаемую ими.


GC в Go использует модель поколений. Она предполагает, что объекты, которые только что были созданы, скорее всего будут использоваться недолго, в то время как объекты, которые уже длительное время находятся в памяти, скорее всего будут продолжать использоваться. Поэтому объекты в Go разделяются на три поколения: новые объекты помещаются в первое поколение (young generation), объекты, которые продержались некоторое время, переносятся во второе поколение (mid generation), а объекты, которые еще дольше находятся в памяти, переносятся в третье поколение (old generation).


Сборка мусора происходит в каждом поколении отдельно. При запуске GC происходит сборка первого поколения. Если после этой сборки осталось недостаточно свободной памяти, то происходит сборка второго поколения, а затем и третьего. Каждая сборка происходит в два этапа: сначала находятся все доступные объекты, а затем освобождается память, занимаемая неиспользуемыми объектами.


GC в Go также предоставляет различные настройки, которые можно использовать для настройки его работы, например, можно изменять пороговые значения для перехода объектов из одного поколения в другое, изменять размеры стеков и кучи и т.д.