Middle+
18
Расскажите про Garbage Collector в Go, как он работает.
Companies where asked
Servicepipi
Answer from AI
sobes.tech AI
Garbage Collector (GC) в Go — это автоматический механизм управления памятью, который освобождает неиспользуемые объекты, чтобы предотвратить утечки памяти.
Go использует триггерный, конкурентный, трассирующий GC с алгоритмом mark-and-sweep (отметь-и-убери). Он работает параллельно с основным потоком выполнения, минимизируя паузы.
Основные этапы работы GC:
- Mark (отметка) — GC проходит по всем корням (глобальные переменные, стеки горутин) и отмечает все достижимые объекты.
- Sweep (сбор) — освобождаются все объекты, которые не были отмечены как достижимые.
GC в Go оптимизирован для низких задержек и высокой производительности, что важно для серверных приложений. Он запускается автоматически при достижении определённого порога использования памяти, но можно управлять его поведением через runtime/debug пакеты.
Пример простого запуска GC вручную:
import (
"runtime"
"fmt"
)
func main() {
var m runtime.MemStats
runtime.ReadMemStats(&m)
fmt.Printf("Before GC: %d bytes allocated\n", m.Alloc)
runtime.GC() // запуск сборщика мусора
runtime.ReadMemStats(&m)
fmt.Printf("After GC: %d bytes allocated\n", m.Alloc)
}