Sobes.tech
Back to questions
Senior
6

Расскажи про сборщик мусора в Go

Companies where asked
I-teco

Answer from AI

sobes.tech AI

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

Основные особенности:

  • Автоматическое управление памятью — разработчику не нужно явно освобождать память.
  • Параллельная работа — сборщик мусора работает одновременно с основными горутинами.
  • Инкрементный и триггерный — сборка запускается при достижении определенного порога использования памяти.

Пример простого кода, где сборщик мусора освободит неиспользуемую память:

package main

import (
    "fmt"
    "runtime"
)

func main() {
    var m runtime.MemStats

    // Создаем большой срез
    data := make([]byte, 10<<20) // 10 MB
    fmt.Println("Allocated 10MB")

    // Освобождаем ссылку
    data = nil

    // Запускаем сборщик мусора вручную
    runtime.GC()

    runtime.ReadMemStats(&m)
    fmt.Printf("HeapAlloc = %v MiB\n", m.HeapAlloc/1024/1024)
}

В этом примере после обнуления ссылки и вызова runtime.GC() память, занятую срезом, будет освобождена.