Sobes.tech
Middle+
17

Расскажите про Garbage Collector в Go, как он работает.

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

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

sobes.tech AI

Garbage Collector (GC) в Go — это автоматический механизм управления памятью, который освобождает неиспользуемые объекты, чтобы предотвратить утечки памяти.

Go использует триггерный, конкурентный, трассирующий GC с алгоритмом mark-and-sweep (отметь-и-убери). Он работает параллельно с основным потоком выполнения, минимизируя паузы.

Основные этапы работы GC:

  1. Mark (отметка) — GC проходит по всем корням (глобальные переменные, стеки горутин) и отмечает все достижимые объекты.
  2. 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)
}