Questão sobre GC

2 respostas
C
class CardBoard {
  Short story = 5;
  CardBoard go(CardBoard cb) {
  cb = null;
  return cb;
  }
  
 public static void main(String[] args) {
    CardBoard c1 = new CardBoard();
    CardBoard c2 = new CardBoard();
    CardBoard c3 = c1.go(c2);
    c1 = null;
   // do Stuff
} 
}

When // doStuff is reached, how many objects are eligible for GC?
A. 0
B. 1
C. 2
D. Compilation fails.
E. It is not possible to know.
F. An exception is thrown at runtime.

Answer:
C is correct. Only one CardBoard object (c1) is eligible, but it has an associated Shortwrapper object that is also eligible.
A, B, D, E, and F are incorrect.

Pessoal não entendi , para mim todos os objetos estão eleitos para GC porquê todos estão setados para NULL não é isto? Gostaria de um esclarecimento a respeito

Obrigado!

2 Respostas

alanclic

c2 não é nulo, você passa por parametro a copia da referencia, e nao a referencia, logo c2 não está elegivel para o GC.

abraços !

lenando

Acredito que em cada instância de CardBoard, seja também criado um objeto Short. Daí quando a variável de referência c1 que aponta para um objeto CardBoard recebe null, 2 objetos estarão disponíveis para gc, o próprio CardBoard e Short.

c2 continuará apontando para o objeto inicialmente atribuido e c3 recebe null em sua inicialização.

No final, somente 2 objetos estarão disponíveis para gc.

Espero ter ajudado.

Fernando.

Criado 14 de abril de 2007
Ultima resposta 14 de abr. de 2007
Respostas 2
Participantes 3