quando um objeto é elegível para um coletor de lixo?

considere este código de exemplo:

1.  public class GC {
2.      private Object o;
3.      private void doSomethingElse(Object obj) { o = obj; }
4.      public void doSomething() {
5.          Object o = new Object();
6.          doSomethingElse(o);
7.          o = new Object();
8.          doSomethingElse(null);
9.          o = null;
10.     }
11. }

Quando o método doSomething é chamado, após qual linha o objeto criado na linha 5 fica disponível para a coleta de lixo?

A. Linha 5

B. linha 6

C. linha 7

D. Linha 8

E. linha 9

F. Linha 10

Resposta: D

por que D? É verdade que quando a Linha 6 é executada o objeto criado na Linha 5 é agora referenciado pela instância var o e o varo local e quando a Linha 8 é executada o objeto agora é referenciado apenas pela referência local var o, então por que a resposta é D e o que acontece depois que a Linha 9 é executada? obrigado.

questionAnswers(2)

yourAnswerToTheQuestion