Sobes.tech
Middle

O que é um coletor de lixo e como funciona?

sobes.tech IA

Resposta da IA

O Garbage Collector (GC) é um mecanismo de gestão automática de memória que aloca e liberta memória que já não é utilizada pelo programa.

Princípio de funcionamento:

  1. Alocação de memória: Quando um programa cria objetos, o coletor de lixo aloca espaço para eles no heap.
  2. Determinando acessibilidade: O coletor de lixo determina quais objetos são acessíveis a partir das "raízes" do programa. As raízes podem ser variáveis locais em funções em execução, variáveis estáticas, referências de threads, etc.
  3. Recolha de lixo: Os objetos que não são acessíveis a partir das raízes são considerados "lixo" e a sua memória pode ser libertada.

Existem diferentes algoritmos de recolha de lixo, por exemplo:

  • Marcar e varrer (Mark-and-Sweep): O coletor percorre o grafo de objetos acessíveis a partir das raízes, marcando-os. Depois, percorre todo o heap e liberta a memória dos objetos marcados.
  • Cópia (Copying): O heap é dividido em duas partes. Os objetos acessíveis são copiados de uma parte para outra, e a antiga parte é limpa.
  • Geracional: Os objetos são divididos em gerações. Os objetos novos vão para a geração jovem, os antigos para a madura. A recolha de lixo ocorre com mais frequência na geração jovem, pois a maioria dos objetos tem uma vida curta.

Exemplo de funcionamento em Java (simplificado):

// O programa cria objetos no heap
Object obj1 = new Object();
Object obj2 = new Object();

// obj1 torna-se inacessível
obj1 = null;

// O coletor de lixo pode libertar a memória ocupada por obj1