Garbage Collector (2)

Esta é uma questão bastante interessante caontida no capítulo 3 (pag 274) do livro SCJP 6 (Kathy Sierra & Bert Bates)

 

10. Given:

3. class Dozens {

4. int[] dz = {1,2,3,4,5,6,7,8,9,10,11,12};

5. }

6. public class Eggs {

7. public static void main(String[] args) {

8. Dozens [] da = new Dozens[3];

9. da[0] = new Dozens();

10. Dozens d = new Dozens();

11. da[1] = d;

12. d = null; // apagou uma referência para o objeto d

13. da[1] = null; // apagou outra referência para o objeto d

14. // do stuff

15. }

16. }

Which two are true about the objects created within main(), and eligible for garbage collection when line 14 is reached?

xA. Three objects were created // Errei

B. Four objects were created

C. Five objects were created

D. Zero objects are eligible for GC

xE. One object is eligible for GC // Errei

F. Two objects are eligible for GC

G. Three objects are eligible for GC

 
 

 
 

Answer:

C and F are correct. da refers to an object of type “Dozens array,” and each Dozens object

that is created comes with its own “int array” object. When line 14 is reached, only the

second Dozens object (and its “int array” object) are not reachable.

 
 

Figura representativa:

 

Na figura abaixo, os objetos no Heap que estão em azul ainda são possíveis de serem acessados. Já os dois objetos em laranja estão passíveis de serem coletados pelo GC (Garbage Collector).

 
 

 
 

 
 

O código abaixo ilustra que o objeto t ainda é acessado através da referência gravada dentro da array test[1] mesmo quando t = null.

 
 

public class Test {

public static void main(String[] args){

Test[] test = new Test[5];

Test t = new Test();

test[1] = t;

t = null;

System.out.println(t);

System.out.println(test[1]);        // veja que ainda temos acesso ao objeto ‘t’ criado através da array.        

}

}

 
 

Output:

null

Test@1b67f74

 
 

Esta entrada foi publicada em Garbage Collector (GC) com as etiquetas . ligação permanente.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s