1
resposta

Garbage Collector

public class Bla {
     int b;
     public static void main(String[] args) {
         Bla b;
        for (int i = 0; i < 10; i++) {
             b = new Bla(); 
             b.b = 10;
         }
           System.out.println("fim");
     }
 }

Neste trecho, não seriam 10 objetos elegíveis ao Garbage Collector já que o objeto b da classe Bla é instanciado 10 vezes?

1 resposta

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!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software