Dúvida em uma questão do livro Kathy - sobre gc

2 respostas
K

A questão é:

3. class Beta { }
4. class Alpha {
5.    static Beta b1;
6.    Beta b2;
7. }
8. public class Tester {
9.    public static void main(String[] args) {
10.     Beta b1 = new Beta(); Beta b2 = new Beta();
11.     Alpha a1 = new Alpha(); Alpha a2 = new Alpha();
12.     a1.b1 = b1;
13.     a1.b2 = b1;
14.     a2.b2 = b2;
15.     a1 = null; b1 = null; b2 = null;
16.     // do stuff
17.   }
18. }

When line 16 is reached, how many objects will be eligible for garbage collection?
A. 0
B. 1
C. 2
D. 3
E. 4
F. 5

Eu responderia 2 objetos, mas no livro a resposta é 1 e a justificativa pra mim está totalmente confusa.
Agradeço as respostas.

2 Respostas

Nykolas_Lima

Pelo que eu entendi é o seguinte:

São criados 4 objetos b1, b2, a1 e a2.

Quando a1 é setado como null, não há mais referencias ao objeto a1.

(Acho que aqui que é o ponto da duvida)
Quando b1 é setado como null, ele ainda possui uma referencia ao seu objeto, na variavel static da classe Alpha. Como a variavel eh static, mesmo a1 sendo setado como null, a variavel a1.b1 nao é perdida, pois é STATIC, ou seja, da classe e não da instancia a1.b1 = b1;

Quando b2 é setado como null, ele ainda possui uma referencia ao seu objeto, na variavel b2 do objeto a2. a2.b2 = b2;

Ou seja, ao final da execução desse código, somente o objeto a1 não terá mais referencias, portanto está qualificado para a coleta de lixo.

rodrigo.bossini

Desenhei o diagrama de objetos no paint. FIcou bem tosco mas dá pra ver porque 1 objeto fica sem referência.
Veja que o b1 que tem em a1 é o mesmo que tem em a2, porque trata-se de uma variável estática.


Criado 26 de fevereiro de 2009
Ultima resposta 26 de fev. de 2009
Respostas 2
Participantes 3