Classe Anonima como deixa-la apta para o Garbage collector ? [RESOLVIDO]

Oi Pessoal eu não sei se já existe algum tópico referente a esse assunto pesquisei mas não consegui encontrar. minha duvida é a seguinte;

se instanciarmos uma classe Test.

[code]

class Test{

public static void main (){
  
    Test t = new Test(); // aqui o objeto t está no acervo
  
    t = null;  // agora t  será recolhido pelo GC

      //e no caso de ?
     new Test(); // como fazer para o Coletor recolhe - la quando não for mais necessaria?
   
      // como essa linha de comando se comporta em relação a memoria ela entra no acervo ?


}

}
[/code]

Cuidado - não confunda “objetos” com “variáveis”.
No código que você mostrou, “t” é o nome de uma variável.
É por isso que não existe “o nome de um objeto”.
Muita gente pergunta “como é que posso achar o nome de um objeto”?
A resposta é: a pergunta não faz sentido. Quem tem nome é uma variável, não o objeto.
Para identificar os objetos, vou dar um número para eles, para você não se confundir.
Isso vai lhe ajudar bastante com aqueles exercícios de certificação.

class Test{  
  
    public static void main (){  
        
        Test t = new Test(); // cria um objeto @1 . A variável t recebe uma referência para @1. 
        
        t = null; // O objeto @1 não é mais referido por t. Se não houver nenhuma outra referência, @1 pode ser recolhido pelo GC. 
  
         new Test(); // cria um objeto @2. A partir daqui, se não houver nenhuma outra referência, @2 pode ser recolhido pelo GC. 
         
    }
} 

Por que é que eu disse “se não houver nenhuma outra referência”?
É que outras partes do código, que você não está vendo, podem receber referências para o tal objeto.
Vou mudar o seu exemplo um pouquinho, só para você ver.

class Test{  

    private static List<Test> objetosCriados = new ArrayList<Test>();
   
    public Test() {
        objetosCriados.add (this);
    }
  
    public static void main (){  
        
        Test t = new Test(); // cria um objeto @1 . A variável t recebe uma referência para @1, mas Test.objetosCriados também adquire uma referência para @1
        
        t = null; // O objeto @1 não é mais referido por t. Se não houvesse nenhuma outra referência, @1 poderia ser recolhido pelo GC. 
        // Só que o problema é que Test.objetosCriados ainda tem uma referência para @1, portanto @1 não pode ser limpado pelo GC. 
  
         new Test(); // cria um objeto @2. A partir daqui, se não houvesse nenhuma outra referência, @2 poderia ser recolhido pelo GC. 
        // Só que o problema é que Test.objetosCriados tem uma referência para @2, portanto @1 não pode ser limpado pelo GC. 
    }
} 

Viu? É por isso que o problema de saber se um objeto foi coletado ou não, não é muito trivial porque exige você olhar o código inteiro, não só um pedacinho.

Muito obrigado! Vc explicou muito bem! estou lendo o livro “Use a Cabeça Java” vc me recomenda algum livro para ler depois desse?