Quando a execução chegar a //faz algo, quantos objetos estarão qualificados para a coleta de lixo?
A. 0
B. 1
C. 2
D. A compilação Falha.
E. Não é possível saber.
F. É lnçada uma exceção no tempo de execução.
A resposta é C, c1 e o Waraper Short.
Fiquei com dúvida aqui, c1 realmente esta qualificado junto com o Short, e c2 não será porque apesar de ter sido passado para o método e ter sido referenciado para null no método não o altera, mas porque c3 não está? visto que c3 recebe o valor de retorno do método c1.go(c2) que é um null.
Agradeço aos amigos que poderem solucionar a dúvida.
É preciso frizar alguns pontos importantes nessa questão. A variável de classe story está ali só para ocupar espaço. Então o que precisamos verificar?
Precisamos saber do seguinte conceto:
1º) Um objeto está qualificado para o Garbage Colector quando não puder ser mais tocado. Isso tem que ser verificado com bastante atenção pois se um objeto for referenciado com null ele ainda poderá ser tocado caso haja mais alguma variavel que aponte para ele. É o caso de:
A() a = new A();
A a2;
a2 = a;
a = null;
Apesar de ser referenciado como null o objeto ainda poderá ser tocado por a2;
2º) C3 neste caso não foi instanciado por tanto não aponta para ninguêm não é a variavel em si que vai ser coletada e sim o objeto a qua ela aponta. No exemplo acima poderiamos demonstrar da seguinte forma:
Ambos apontam pro mesmo objeto:
a -----> [A] <------a2
Mas se eu referenciar a como null o objeto ainda vai ser tocado por a2
a --X–> [A] <-----a2
F
fabioEM
Aproveitando anderson.bonavides da otima explicação,sempre fiquei com uma dúvida se eu fizer tiver então
um variável qualquer do tipo Animal a=null;do jeito que esta ,será qualificada para coleta não ?Ela nao criou nenhum objeto
veleu!
anderson.bonavides
fabioEM:
Aproveitando anderson.bonavides da otima explicação,sempre fiquei com uma dúvida se eu fizer tiver então
um variável qualquer do tipo Animal a=null;do jeito que esta ,será qualificada para coleta não ?Ela nao criou nenhum objeto
veleu!
Vc criou uma variável do tipo Animal. Mas vc não criou um objeto tipo Animal. Animal a não se refere a ninguêm. Apartir do momento que vc intancia a variavel Animal a = new Animal(); vc está dizendo que a passa a referenciar um objeto tipo Animal.
H
Higor
Agradeço pelas respostas anderson e fabioEM, eliminaram totalmente minhas dúvidas.
Abraços.
scarton
Mas neste caso a resposta não seria B (1 objeto), uma vez q Short é membro e não objeto?
anderson.bonavides
Um objeto seria C1 já que ele referênciava CardBoard e o outro objeto seria CardBoard cb no método ja que ele primeiro vai apontar para o mesmo objeto C2 e depois vai perder a referência.
Segue uma vizualização do cenário. Era assim que estudava no papel.
scarton
Agora sim esta claro, mas é um pouco dificil enxergar td isso na hr do exame não?rsss
obs: gostei da ideia do desenho, aplicarei nos meus estudos!
Abraços,
anderson.bonavides
scarton:
Agora sim esta claro, mas é um pouco dificil enxergar td isso na hr do exame não?rsss
obs: gostei da ideia do desenho, aplicarei nos meus estudos!
Abraços,
Depois que vc começa a desanhar vc consegue vizualizar rapido. E não tem jeito na hora da prova o papel vai aparecer em cena varias vezes. Pra desenhar pra responder multipla escolha.
=]
J
javadev
Pelo que vc disse um objeto referencia outro, é isso? Cuidado! Essa confusão entre variáveis de referências e objetos podem comprometer na resolução de questões. Se bem que vc já passou na prova né Mas fica o alerta pra galera que ainda está na luta. A propósito, só há 1 objeto qualificado para coleta. Dêem uma olhada nesse post http://www.guj.com.br/posts/list/81738.java
anderson.bonavides
É verdade dev eu tava olhando isso agora pouco mas ainda não postei por causa de tempo. Neste instante eu ia fazer esta alteração. E pedir desculpa ao erro que está ai. Não tem nenhum obj no método para ser coletado.
H
Higor
Portanto a resposta do livro está incorreta já que a resposta é C, dois objetos estão qualificados para a coleta de lixo.
anderson.bonavides
Higor:
Portanto a resposta do livro está incorreta já que a resposta é C, dois objetos estão qualificados para a coleta de lixo.
Sim é verdade higor. Vou te mostar um exemplo onde dois objetos estariam qualificados mostrando o mesmo exemplo.
Agora tenho 2 objetos. Um no método CardBoard e um do método main.
Espero ter me redimido aki do erro. =]
marlon_patrick
galera…a reposta do Livro está correta…
é a letra C…
2 objetos estão qualificados para a coleta…
isso acontece pq o objeto para que c1 aponta é perdido e não tem mais ninguem o referenciando…
e esse objeto para que c1 apontava tem um objeto Short…que tambem não tem mais nenhuma referencia
portanto os 2 estão qualificados.
Ai vai uma dica…
subscreva o metodo finalize da classe, pois quando o coletor é executado ele chama o método finalize do objeto sendo coletado…