Qualificação de Objetos  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
Higor
Java Ninja

Membro desde: 18/08/2007 19:06:25
Mensagens: 251
Offline

Fique com dúvida nesta questão referente a quantos objetos estão qualificados para o coletor de lixo.



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.

Abraços.

This message was edited 1 time. Last update was at 14/02/2008 04:01:21


SCJP 5.0
SCJA 1.0
SCWCD 5
marcosbrandao
JavaEvangelist
[Avatar]

Membro desde: 17/08/2006 19:03:36
Mensagens: 477
Offline

Higor antes de postar, faça uma busca.
Já existe uma thread que trata deste assunto:

http://www.guj.com.br/posts/list/77248.java#408089

This message was edited 1 time. Last update was at 14/02/2008 08:27:24

anderson.bonavides
GUJ Master
[Avatar]

Membro desde: 30/07/2007 22:43:05
Mensagens: 1151
Offline

É 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:


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

Sun Certified Java Programmer 5.0
fabioEM
GUJ Master
[Avatar]
Membro desde: 13/09/2007 13:34:23
Mensagens: 1041
Offline

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!

"Um pouco de ciência nos afasta de Deus. Muito, nos aproxima." (Louis Pasteur)
Conheçam Sócrates: http://www.youtube.com/watch?v=SlJSF-V6yBA
Conheçam a obra social Célio Lemos: http://www.oscl.org.br/site/
Conheçam o Projeto: http://www.youtube.com/watch?v=9-k818tfG6M&feature=youtu.be
Sun Certified Java Programmer 1.5
anderson.bonavides
GUJ Master
[Avatar]

Membro desde: 30/07/2007 22:43:05
Mensagens: 1151
Offline

fabioEM wrote: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.

Sun Certified Java Programmer 5.0
Higor
Java Ninja

Membro desde: 18/08/2007 19:06:25
Mensagens: 251
Offline

Agradeço pelas respostas anderson e fabioEM, eliminaram totalmente minhas dúvidas.

Abraços.

SCJP 5.0
SCJA 1.0
SCWCD 5
scarton
Thread.start()
[Avatar]

Membro desde: 05/06/2007 03:08:43
Mensagens: 25
Localização: Sorocaba/SP
Offline

Mas neste caso a resposta não seria B (1 objeto), uma vez q Short é membro e não objeto?

Tiago Scarton
SCJP 5.0
SCWCD 5.0
anderson.bonavides
GUJ Master
[Avatar]

Membro desde: 30/07/2007 22:43:05
Mensagens: 1151
Offline

scarton wrote:Mas neste caso a resposta não seria B (1 objeto), uma vez q Short é membro e não objeto?

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.
[Thumb - gc.JPG]
 Nome do arquivo gc.JPG [Disk] Download
 Descrição Cenário do exemplo demonstrado acima.
 Tamanho 11 Kbytes
 Baixado:  87 vez(es)


Sun Certified Java Programmer 5.0
scarton
Thread.start()
[Avatar]

Membro desde: 05/06/2007 03:08:43
Mensagens: 25
Localização: Sorocaba/SP
Offline

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,

Tiago Scarton
SCJP 5.0
SCWCD 5.0
anderson.bonavides
GUJ Master
[Avatar]

Membro desde: 30/07/2007 22:43:05
Mensagens: 1151
Offline

scarton wrote: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.


=]

Sun Certified Java Programmer 5.0
javadev
JavaChild

Membro desde: 02/09/2007 18:53:15
Mensagens: 112
Offline

anderson.bonavides wrote: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.

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
GUJ Master
[Avatar]

Membro desde: 30/07/2007 22:43:05
Mensagens: 1151
Offline

É 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.

Sun Certified Java Programmer 5.0
Higor
Java Ninja

Membro desde: 18/08/2007 19:06:25
Mensagens: 251
Offline

Portanto a resposta do livro está incorreta já que a resposta é C, dois objetos estão qualificados para a coleta de lixo.

SCJP 5.0
SCJA 1.0
SCWCD 5
anderson.bonavides
GUJ Master
[Avatar]

Membro desde: 30/07/2007 22:43:05
Mensagens: 1151
Offline

Higor wrote: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. =]

This message was edited 3 times. Last update was at 15/02/2008 09:39:06


Sun Certified Java Programmer 5.0
marlon patrick
Debugger
[Avatar]

Membro desde: 18/11/2007 14:33:53
Mensagens: 60
Localização: Paulista-PE
Offline

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..



A saída desse codigo é:
finalizou B
finalizou A

portanto..foram coletados 2 objetos.

Vivendo e Aprendendo
http://marlonpatrick.info/
[MSN]
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team