Certificação(whizlabs)

How many objects will be eligible for garbage collectionafter the executionof line 9 int the following code?

public class GCTest {
   public static void main(String args[]) {

      Double x = new Double(0);
      for(int i = 0; i < 5; i++)
         for(int j = 0; j < 3; j++ )
              x = new Double(i + j);
      int a = x.intValue();                       //linha 9
      System.out.println("a = " + a);
   } 

}

Select 1 option:
[A] 8
[B] 14
[C] 15
[D] 16

alguem pode me ajudar a enchergar porque a resposta é 15 ?

o x perde a referencia toda hora que essa linha é executada.

Claro a ultima vez que o for rodar ele vai ter a ultima referencia ai fica com 14 objetos perdidos, mas tem ele lá fora Double x = new Double(0);

Espero ter ajudado.

Dai cara, seguinte…

Existe um objeto antes do loop, ok?

Depois são criados mais 15 objetos… o total seria 16, ok?
MAS o ultimo objeto criado permanece referenciado por x, portanto 15 objetos pro gc…

abraçao e amanha é o dia

[quote=gustavobs]Dai cara, seguinte…

Existe um objeto antes do loop, ok?

Depois são criados mais 15 objetos… o total seria 16, ok?
MAS o ultimo objeto criado permanece referenciado por x, portanto 15 objetos pro gc…

abraçao e amanha é o dia[/quote]

vlw gustavo, boa sorte manu, dia 5 março é eu, to torcendo por vc.

Double x = new Double(0); for(int i = 0; i &lt; 5; i++) for(int j = 0; j &lt; 3; j++ ) x = new Double(i + j); int a = x.intValue(); System.out.println(&quot;a = &quot; + a); } }

Boa questão.

X foi iniciado, então 1 objeto. O primeiro loop roda 5 vezes, porém a cada vez faz 3 volta, o que dá 15 voltas.

Sendo x = new Double(…) teremos 15 objetos criados, porém ele é sobrescrito a cada volta do segundo loop, sendo assim dá 16 vezes. Só que na primeira execução, onde x = new Double(0), ele é sobrescrito pela primeira volta do loop. E ao final da execução o último dos objetos está ainda referenciado em x, ou seja, 15 objetos de presente pro GC.

[quote=otavio]Double x = new Double(0); for(int i = 0; i &lt; 5; i++) for(int j = 0; j &lt; 3; j++ ) x = new Double(i + j); int a = x.intValue(); System.out.println(&quot;a = &quot; + a); } }

Boa questão.

X foi iniciado, então 1 objeto. O primeiro loop roda 5 vezes, porém a cada vez faz 3 volta, o que dá 15 voltas.

Sendo x = new Double(…) teremos 15 objetos criados, porém ele é sobrescrito a cada volta do segundo loop, sendo assim dá 16 vezes. Só que na primeira execução, onde x = new Double(0), ele é sobrescrito pela primeira volta do loop. E ao final da execução o último dos objetos está ainda referenciado em x, ou seja, 15 objetos de presente pro GC.[/quote]

Obrigado Otavio, mais claro que isso impossivel ^^