Coletor de lixo (GC)

Estou com uma dúvida com o seguinte código abaixo não sei como saber quantos objetos podem ser “recolhidos” pelo coletor de lixo a questão é a seguinte

 public class Garb{
           Garb g;
           public Garb(Object g){
                this.g=(Garb)g;
           }
           public static void main(String args[]){
                Garb gb1=new Garb(new Garb(new Garb(null)));
                gb1.g.g=new Garb(new Garb(null));
               Garb gb2=new Garb(new Garb(new Garb(gb1)));
               gb2.g=gb1.g;
               System.gc();
          }
      }

A - 0
B - 1
C - 2
D - 3
E - 4
F - 5
G - 6
H - Mais de 6

Fazendo esse exercício me surgiu a dúvida de como criar um diagrama para identificar os objetos que serão recolhidos pelo coletor de lixo. A resposta para a questão é D, mas eu não sei o porque nem consigo visualizar isso desde já obrigado pela ajuda.

A melhor maneira de resolver esse tipo de questão é fazer um desenho da stack e da heap, respectivamente. A cada linha do método você coloca no seu diagrama as referências na stack e os objetos criados no heap, claro, apontando as referências entre eles. A cada linha você desenha as referências criadas e as referências desmanchadas. Ao final, a partir de cada referência no stack você segue as referências marcando os objetos percorridos. Quem ficar sem marcação será coletado pelo GC.

Valeu já me deu uma luz ai para da uma estudada nessa parte.