| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/02/2008 03:59:33
|
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/02/2008 08:27:03
|
marcosbrandao
JavaEvangelist
![[Avatar]](/images/avatar/38da053032cb4c18a10fe33f871fc2bd.png)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/02/2008 09:22:20
|
anderson.bonavides
GUJ Master
![[Avatar]](/images/avatar/b9d21287003f6041d2efb5c0cbcce3fd.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/02/2008 10:55:42
|
fabioEM
GUJ Master
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/02/2008 11:27:04
|
anderson.bonavides
GUJ Master
![[Avatar]](/images/avatar/b9d21287003f6041d2efb5c0cbcce3fd.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/02/2008 12:47:31
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/02/2008 13:44:13
|
scarton
Thread.start()
![[Avatar]](/images/avatar/821b7564a31a15c15f5670de9e5e127d.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/02/2008 15:02:26
|
anderson.bonavides
GUJ Master
![[Avatar]](/images/avatar/b9d21287003f6041d2efb5c0cbcce3fd.jpg)
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.
|
| Nome do arquivo |
gc.JPG |
Download
|
| Descrição |
Cenário do exemplo demonstrado acima. |
| Tamanho |
11 Kbytes
|
| Baixado: |
87 vez(es) |
|
Sun Certified Java Programmer 5.0 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/02/2008 15:12:25
|
scarton
Thread.start()
![[Avatar]](/images/avatar/821b7564a31a15c15f5670de9e5e127d.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/02/2008 15:19:21
|
anderson.bonavides
GUJ Master
![[Avatar]](/images/avatar/b9d21287003f6041d2efb5c0cbcce3fd.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/02/2008 15:59:52
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/02/2008 16:15:23
|
anderson.bonavides
GUJ Master
![[Avatar]](/images/avatar/b9d21287003f6041d2efb5c0cbcce3fd.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/02/2008 21:42:14
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/02/2008 23:16:11
|
anderson.bonavides
GUJ Master
![[Avatar]](/images/avatar/b9d21287003f6041d2efb5c0cbcce3fd.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/02/2008 19:11:16
|
marlon patrick
Debugger
![[Avatar]](/images/avatar/8e9a0e5f19caa707db6dfae2a3551504.jpg)
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/ |
|
|
 |
|
|