Junior — Middle
Como funciona o mecanismo de recolha automática de lixo no sistema de gestão de memória?
sobes.tech IA
Resposta da IA
No Go, o mecanismo de recolha automática de lixo (GC) baseia-se num algoritmo de rastreio com contagem de acessibilidade de objetos. Quando um programa aloca memória para objetos, o recolhedor de lixo é executado periodicamente para determinar quais objetos já não são acessíveis a partir dos pontos raiz (por exemplo, variáveis globais, pilhas de goroutines).
O GC em Go funciona em paralelo com a execução do programa, minimizando as pausas. Utiliza três fases principais:
- Marcação — o recolhedor marca todos os objetos acessíveis a partir das raízes.
- Limpeza — a memória ocupada por objetos não marcados (inacessíveis) é libertada.
- Compressão — em Go, a compressão de memória não é aplicada, pois é utilizado um algoritmo com divisão em gerações e a fragmentação é controlada de outra forma.
Assim é como parece um ciclo GC simplificado:
// Exemplo de uso implícito de GC
func main() {
data := make([]byte, 1024*1024) // aloca 1MB
_ = data
// Quando data deixar de ser usado, o GC libertará a memória automaticamente
}
Desta forma, o programador não gere a memória manualmente, e o GC garante a libertação automática de objetos não utilizados, reduzindo a probabilidade de fugas de memória.