Sobes.tech
Назад к вопросам
Middle+
3

Как работает Garbage Collector в Go? Что такое стек и куча?

Компании, где спрашивали
МВидео/эльдорадо

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

sobes.tech AI

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

Go использует триггерный, конкурентный, многопоточный GC с алгоритмом mark-and-sweep:

  • Mark (отметка): GC проходит по всем доступным объектам, начиная с корней (стек, глобальные переменные), и отмечает те, которые достижимы.
  • Sweep (очистка): все неотмеченные объекты считаются мусором и освобождаются.

GC работает параллельно с выполнением программы, минимизируя паузы.

Стек — это область памяти, где хранятся локальные переменные функций, параметры и адреса возврата. Стек работает по принципу LIFO (последним пришёл — первым вышел). Он быстро выделяется и освобождается при вызове и возврате из функций.

Куча (heap) — это область памяти для динамического выделения объектов, срок жизни которых может выходить за рамки одной функции. Объекты в куче управляются GC.

Пример:

func foo() {
    x := 10 // переменная на стеке
    p := new(int) // выделение в куче
    *p = 20
}

Здесь x хранится в стеке, а p указывает на область в куче.

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