O que acontece com a memória alocada para 2°Conta quando ele muda a referência da mesma? Ela é extinta pelo garbage colletor ou algo do tipo?
O que acontece com a memória alocada para 2°Conta quando ele muda a referência da mesma? Ela é extinta pelo garbage colletor ou algo do tipo?
Oi João Pedro, tudo bem?
Na verdade, a segunda conta apontava inicialmente para o mesmo objeto que a primeira, certo? Então nenhuma memória extra foi utilizada quando fizemos Conta segundaConta = primeiraConta;
, pois tivemos uma nova variável, mas nenhum novo objeto. Logo, nenhuma memória foi alocada para a segunda conta. Já ao fazermos Conta segunda = new Conta();
, aí sim precisamos de alocar uma memória para um novo objeto, mas o Garbage Collector não precisou de ser utilizado, pois em momento nenhum essa segunda conta ficou inativa.
O Garbage Collector entraria em ação se tivéssemos um código assim:
Conta primeira = new Conta();
Conta segunda = new Conta();
segunda = primeira;
Repare que nesse código, criamos dois objetos. Porém, ao fazermos a variável segunda
apontar para a primeira
(que se refere ao primeiro objeto que criamos), estamos "excluindo" o segundo objeto que foi criado, deixando-o sem utilidade. Quando o Garbage Collector percebe que esse objeto está inativo, e que nenhuma referência está apontando para ele, aí sim ele tira esse objeto da memória.
Esse tópico de referências e objetos costuma ser mais complicado mesmo, se tiver mais alguma dúvida, fique à vontade para falar por aqui!
Espero ter ajudado, abraços e bons estudos!