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() память, занятую срезом, будет освобождена.