1
resposta

Dúvida Aula 04. O ciclo de vida de um objeto - Exercício 1

Ex: 01

Escolha a opção adequada ao tentar compilar e rodar o arquivo a seguir:

class B{

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

A) Compila e garbage coleta 10 objetos do tipo B na linha do System.out. B) Compila e não podemos falar quantos objetos do tipo B foram garbage coletados na linha do System.out. C) Não compila.

Segundo o exercício, a alternativa correta é a B. Entretanto, pelo que entendi, o código apresentado cria 10 objetos que se tornam inacessíveis e elegíveis para serem coletados pelo garbage collector. De fato, não dá para afirmar quantos objetos o GC coleta na linha do System.out, mas poderíamos afirmar que o GC poderia coletar 10 objetos do tipo B, meu entendimento está correto? Segue abaixo alterações sobre o código que fiz para chegar nesta conclusão:

class B{ int num = 0; // declarei essa variável apenas para ajudar no entendimento sobre a instância criada } class A { public static void main(String[] args) { B b; for(int i = 0;i < 10;i++){ b = new B(); System.out.println(b.num); b.num++; // mesmo atribuindo um valor no atributo "num" da classe B, o mesmo é "perdido" quanto um novo objeto é atribuído na variável b } System.out.println("Finalizando!"); //System.out.println(b.num); // variável inacessível fora do escopo do for } }

1 resposta

Oi FERNANDO

Exato, seu entendimento está correto. Não dá para afirmar quantos objetos o GC coleta na linha do System.out, mas poderíamos afirmar que o GC poderia coletar 10 objetos do tipo B :)

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