já falaram algo parecido no forum mas eu não entendi…
Object o1 = new Object();
Object o2 = o1;
o1 = null;
o2 = null;
Quando o objeto “o1” fica pronto para ser coletado?
ao fazer “o1 = null” ou “o2 = null” ???
disseram que é ao fazer o2 = null, porque só ai vc está matando a referência criada com o operador new…
mas se vc faz “o1 = null” porque não é nessa linha?
Vc cria um objeto:
Object o1 = new Object();
Depois vc cria uma outra referência apontado para o mesmo objeto:
Object o2 = o1;
(a tradução disso é: o2, aponte para o mesmo lugar que o1 está apontando)
Nesse momento, vc tem duas referências apontando para o mesmo objeto. Se aqui vc faz…
o1 = null;
… vc ainda mantém uma referência apontando para o objeto, que é o2. Ou seja, o objeto ainda não está pronto para ser coletado! Isso só vai acontecer depois que vc fizer…
o2 = null;
Blz?
Imagina assim:
Object o1 = new Object();
-com o new, um novo objeto o1 é criado no endereço 10
-o1 aponta para endereço 10
(temos> o1->10)
Object o2 = o1;
-o2 aponta para o mesmo endereço de o1 (endereço 10)
(temos o1->10 e o2->10)
o1 = null;
-removida a referência de o1
(temos o1->null e o2->10)
o2 = null;
-removida a referência de o2
(temos o1->null e o2->null)
legal…
mas isso não quer dizer que assim que vc declarar o2 como null,
ele vai ser imediatamente coletado, quem decide isso é a JVM, certo?
Sim, NUNCA se sabe exatamente quando o GC vai rodar.