Sobes.tech
Middle

Como determinar qual objeto em Java é lixo?

sobes.tech IA

Resposta da IA

Um objeto é considerado lixo em Java quando não há mais referências a ele a partir das partes ativas do programa. Isso ocorre nos seguintes casos:

  • Sem referências de objetos raiz (referências de raiz): Os objetos raiz incluem referências de:

    • Variáveis locais em threads ativos.
    • Variáveis estáticas.
    • Referências JNI (objetos acessíveis a partir de código nativo).
  • Referências apenas de outros objetos "lixo": Mesmo que o objeto O1 referencie o objeto O2, mas nem O1 nem O2 têm referências de objetos raiz, ambos os objetos são considerados lixo.

Exemplo:

// Referência raiz de uma variável estática
static Object staticObject = new Object();

// Referência raiz de uma variável local em um método ativo
public void someMethod() {
    Object localObject = new Object(); // Referência de uma variável local
    // Após sair do método someMethod, localObject torna-se inacessível
}

// Exemplo de objeto "lixo"
public Object createGarbage() {
    Object obj1 = new Object();
    Object obj2 = new Object();
    obj1 = obj2; // obj1 agora referencia o mesmo objeto que obj2
    // O objeto original referenciado por obj1 agora não é acessível e é lixo
    return obj2; // Retorna a referência a um objeto vivo
}

O coletor de lixo em Java determina objetos inacessíveis usando o algoritmo de "rastreamento de acessibilidade" (reachability tracing), começando pelos objetos raiz. Objetos que não podem ser alcançados através de uma cadeia de referências a partir dos objetos raiz são considerados inacessíveis e estão sujeitos à coleta.