Как работает 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 освобождает память в куче, когда объекты становятся недостижимыми.