Olá, pessoal!
Tenho uma dúvida com relação ao garbage collector.
Vou mostrar um programa e como eu pensei nele…
package com.wilson.garbagecollector;
import java.util.ArrayList;
class C1
{
}
class C2 extends C1
{
}
public class Teste
{
public static void main(String []args)
{
C1 a = new C1();
C2 b = new C2();
C1 c = new C2();
ArrayList<C1> lista = new ArrayList<C1>();
lista.add(a);
lista.add(b);
lista.add(c);
lista.add(new C1());
lista.add(lista.get(1));
lista.add(lista.get(2));
lista.remove(0);
a = null;
b = null;
c = null;
//AQUI
}
}
Quais objetos são candidatos à varredura pelo GC no trecho “AQUI” ?
A minha dúvida é a seguinte. Eu aprendi (não sei se errado) que o garbage collector verifica se os objetos estão referenciando “null”. Caso estejam, são limpos por ele (a um tempo não uniforme, mas todo de uma vez).
O que andei lendo vai um pouco contra isso, pelo menos, no meu entendimento.
No código acima, vou representar a referência por uma seta, mesmo não existindo em Java:
a -> C1
b -> C2
c -> C2
lista -> ArrayList
O que li foi: quando faço:
a = null;
b = null;
c = null;
sobra apenas o objeto Arraylist para o GC recolher.
Eu pensava da seguinte maneira. Se a, b e c apontam para null, estes devem ser recolhidos pelo GC, e não ArrayList, que possui referência não nula…
Alguém poderia me explicar melhor isso?