Какое время жизни данных на heap

«Какое время жизни данных на heap» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Данные в heap живут до тех пор, пока на них есть хотя бы одна активная ссылка. В Go сборщик мусора (GC) автоматически освобождает память, когда объекты больше не достижимы из корневых указателей (глобальные переменные, стек вызовов, регистры).

Пример:

func createObject() *int {
    x := 42 // выделяется в heap (escape analysis)
    return &x // ссылка сохраняется
}

func main() {
    p := createObject()
    // объект живет, пока p ссылается на него
    p = nil // теперь объект может быть собран GC
}

Нюансы:

  • GC работает не мгновенно, а по мере необходимости
  • Время жизни может быть продлено неочевидными ссылками (например, в замыканиях)
  • Можно влиять на GC через runtime.GC() или debug.SetGCPercent()