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 - É lançada uma exceção no tempo de execução.
a respostas/explicação dada pelo livro diz q a resposta correta é a C, e explica que apenas um objeto do tipo CardBoard está qualificado para a coleta e que o wrapper Short tbm esta qualificado, já q nenhuma thead pode alcança-lo.
eu discordo dessa resposta pois a referência c3 tbm (pelo q entendo) está qualificado para a coleta, já que recebera o valor null nesta execução.
então a resposta seria 3 objetos qualificados para a coleta.
Preste bastante atenção nesse tipo de questão. A referência c3 não “aponta” para nenhum objeto criado no heap. Não foi criado um objeto c3. Isso é que confunde…
Humbertim2
ishi… doidera…
mais o objeto c1 ao ser atribuido null deixa de ter a referencia ao objeto CardBoard… ou seja ele nao aponta pra nenhum objeto criado no heap…
nao eh??..
e baseado nisso q vc falou… a referencia c3 nao estaria qualificado para coleta de lixo??..
M
mfjeng
Como c3 seria qualificado para a coleta de lixo se não foi criado um objeto c3? Entendeu?
Humbertim2
=]… okay… okay… valews pela ajuda
dlt
Eu não entendi o seguinte: quando ele passa a cópia da referência do objeto c2 no método em c1.go(c2), ele seta a referncia de c2 pra null, também, certo?
Logo, seriam 3 objetos elegíveis. Ou não?
bl.rafael
Pelo que entendi, o objeto c3 não é instanciado (new), e o objeto c2 que foi passado recebeu null, logo está qualificado para o gc e o wraper Short que existia dentro dele.
A dúvida do nosso amigo é que c3 não foi instanciado, logo não está qualificado para o gc.
O que vale lembrar é, se o c3 fosse instanciado, e depois declarado null, não seriam 3 objetos qualificados para o gc, e sim 4, pois cada objeto possui uma referência Short dentro dele. Correto?
dlt
Nesse caso ficou faltando o objeto c1.
Seriam 3 elegíveis. c1, c2 e o wrapper short.
Humbertim2
bl.rafael:
Pelo que entendi, o objeto c3 não é instanciado (new), e o objeto c2 que foi passado recebeu null, logo está qualificado para o gc e o wraper Short que existia dentro dele.
[b]A dúvida do nosso amigo é que c3 não foi instanciado, logo não está qualificado para o gc.
O que vale lembrar é, se o c3 fosse instanciado, e depois declarado null, não seriam 3 objetos qualificados para o gc, e sim 4, pois cada objeto possui uma referência Short dentro dele. Correto?[/b]
ótima observação…
alerodrigues
acredito que:
no método c1.go(c2) é passada uma cópia da referência para o objeto c2, não objeto em sí.
por isso o null dentro do método é atribuído a essa cópia da referência apenas, portanto o objeto c2 continua válido.
e o objeto c3 nem é instanciado na memória como já disseram.
certo ?
paulo.ubuntu
Se voce prestar atenção apenas c1 perdeu completamente a sua referencia…e como um Objeto do tipo CardBoard
tem um Short…
quando chegar na ultima linda c1 ficou elegivel e com sigo sua variavel de instancia tambem
então a resposta é
2
paulo.ubuntu
Se voce prestar atenção apenas c1 perdeu completamente a sua referencia…e como um Objeto do tipo CardBoard
tem um Short…
quando chegar na ultima linda c1 ficou elegivel e com sigo sua variavel de instancia tambem