Sobes.tech
Junior — Middle

Explique o mecanismo de recolha automática de lixo na linguagem Go e como ela gere a memória.

sobes.tech IA

Resposta da IA

Na linguagem Go, é utilizado um recolhedor de lixo automático (Garbage Collector, GC), que gere a memória libertando objetos não utilizados.

O mecanismo baseia-se num algoritmo de rastreio e contagem de acessibilidade de objetos:

  • Go inicia a recolha de lixo paralelamente à execução do programa (GC concorrente).
  • O GC determina quais objetos no heap já não são acessíveis a partir das referências raiz (por exemplo, variáveis globais, pilhas de goroutines).
  • Objetos inacessíveis são considerados lixo e libertados.

Características:

  • Go usa uma recolha em três gerações: mark (marcar objetos acessíveis), sweep (libertar objetos inacessíveis).
  • A recolha de lixo minimiza as pausas para não bloquear a execução do programa.
  • A gestão de memória é automática, o programador não precisa de libertar explicitamente a memória.

Exemplo:

func main() {
    s := make([]int, 1000000) // alocação de memória
    // uso de s
    s = nil // agora o slice não é acessível
    // GC libertará a memória na próxima execução
}

Assim, o Go simplifica a gestão de memória, reduzindo a probabilidade de fugas e erros.