Sobes.tech
Junior — Middle

Pode descrever o mecanismo de funcionamento do coletor de lixo na linguagem Go?

sobes.tech IA

Resposta da IA

Na linguagem Go, o coletor de lixo (GC) é implementado como um processo concorrente, multithread, com baixa latência. Sua tarefa é liberar automaticamente a memória que não está mais sendo usada pelo programa.

Princípios básicos de funcionamento:

  • Processo em três fases:

    1. Marca: O GC percorre todas as raízes (variáveis, pilha, objetos globais) e marca todos os objetos acessíveis.
    2. Varredura: Todos os objetos não marcados como acessíveis são considerados lixo e liberados.
    3. Pausas mínimas: O GC tenta minimizar as pausas na execução do programa, realizando a maior parte do trabalho em paralelo com os threads principais.
  • Abordagem por gerações: O GC do Go não divide os objetos por gerações, mas é otimizado para detectar rapidamente objetos não utilizados.

  • Disparador: O GC inicia quando a quantidade de memória alocada atinge um limite em relação à memória já alocada.

Exemplo: o desenvolvedor não gerencia a memória manualmente, apenas cria objetos, e o GC libera automaticamente os não utilizados.

func main() {
    data := make([]byte, 1024*1024) // aloca 1MB
    _ = data
    // Quando data deixar de ser usado, o GC liberará a memória automaticamente
}

Assim, o coletor de lixo em Go simplifica a gestão de memória e reduz a probabilidade de vazamentos.