Sobes.tech
Junior — Middle

Como é que o período de existência dos objetos na memória heap gerida é determinado?

sobes.tech IA

Resposta da IA

No Go, a duração de vida dos objetos no heap gerido é determinada pelo tempo de vida das referências a esses objetos. Se existirem referências ativas (variáveis, ponteiros) a um objeto no heap, o coletor de lixo (GC) considera o objeto vivo e não o remove. Assim que todas as referências ao objeto desaparecem (o objeto torna-se inacessível), o GC marca-o para remoção.

O Go usa um coletor de lixo de três gerações com um algoritmo de rastreamento de alcançabilidade: começando pelos objetos raiz (pilha, variáveis globais), marca todos os objetos alcançáveis, os outros são considerados lixo.

Exemplo:

func f() {
    p := new(int) // objeto no heap
    *p = 42
    // p existe, o objeto está vivo
}
// após sair de f(), o objeto torna-se inacessível e será removido pelo GC