Duvida em Garbage Collection

Falae pessoal, tenho uma duvida numa questão de Garbage Collection, alguem poderia dar uma luz:

1.   class X2 {
2.     public X2 x;
3.     public static void main(String [] args) {
4.       X2 x2 = new X2();
5.       X2 x3 = new X2();
6.       x2.x = x3;
7.       x3.x = x2;
8.       x2 = new X2();
9.       x3 = x2;
10.     doComplexStuff();
11.   }
12.  }

Depois da linha 9, quantos objetos estarão qualificados pra coleta de lixo?

As linhas 6 e 7 fazem uma ilha de isolamento ne?! Na linha 8 o objeto q era referenciado por x2 antes não é perdido? E na linha 9 a mesma coisa com x3?
To achando Garbage Collection o pior assunto da certificação :???:

Oi Duende,

Na verdade a ilha de isolamento só existirá após a linha 9. E somente a partir deste momento, os objetos instanciados nas linhas 4 e 5 estarão elegíveis para coleta.

A regra é simples: objetos que não poderem ser alcançados por segmentos ativos estarão elegíveis para coleta de lixo.

Não confunda não poder ser alcançado, com não ser referenciado. Note que nas ilhas de isolamento os objetos estão referenciados entre si, mas não podem ser alcançados por segmentos ativos.

Espero ter ajudado :wink:

Bom… acho que viajei, mas vou postar aqui…

os objetos que iram ser coletados pelo garbage collector são os da linha 4 e 5, eles seraum candidatos a serem coletados após a llinha 8 e 9…

certo?

Atn.
Dennys Fredericci

É isso mesmo, Dennys. :slight_smile:

Robson