Olá, Ryan!
Você está correto em dizer que o objeto b da classe Bla é instanciado 10 vezes. No entanto, a elegibilidade para o Garbage Collector não é determinada pelo número de vezes que um objeto é instanciado, mas sim pelo número de referências a esse objeto que foram perdidas.
No seu código, a cada iteração do loop, uma nova instância de Bla é criada e a referência a essa instância é atribuída à variável b. Isso significa que a referência à instância anterior de Bla é perdida, tornando essa instância anterior elegível para o Garbage Collector.
No final do loop, quando o código chega à linha System.out.println("fim");, 9 instâncias de Bla se tornaram inacessíveis (e, portanto, elegíveis para o Garbage Collector) porque suas referências foram perdidas nas iterações anteriores do loop. A 10ª instância de Bla, no entanto, ainda é acessível através da variável b, então ela não é elegível para o Garbage Collector neste momento.
Espero que isso esclareça sua dúvida.
Bons estudos!
Sucesso ✨
Um grande abraço e até mais!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!