Dúvida garbage collection  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
cu_ringa
Virtual Machine Man
[Avatar]

Membro desde: 27/08/2003 00:19:11
Mensagens: 602
Localização: Natal-RN
Offline

tava fazendo o teste da Caleum e me deparei com a seguinte questão e n entedi a resposta.


respostas:


a resposta correta é a 5.

Se crio 10 objetos Objects dentro de um metodo e naum tem nenhuma referência global a esses objetos, num era p morrer depois de chamar o metodo naum ? E além disso o escopo é o laço "for", q é menor ainda.

"O que levamos desta vida, é a vida que a gente leva".
thiagomont
JavaChild

Membro desde: 02/05/2007 00:49:04
Mensagens: 139
Offline

blz?
Na verdade o objeto não morre automaticamente. O objeto é deixado disponível para o garbagge collector. Porém o garbagge collector será executado apenas quando o sistema operacional der prioridade na thread dele. Ou seja é impossível de determinar quantos objetos vão existir após a execução do código, visto que não podemos determinar quando o garbagge collector será executado.

Existe um comando (System.gc() que pede para o sistema operacional rodar o collector, porém não é garantia que será executado naquele momento.

Espero ter ajudado.

Thiago Amaral Monteiro
Analista de Sistemas - SERPRO
eduveks
GUJ Ranger
[Avatar]

Membro desde: 19/04/2005 07:45:40
Mensagens: 831
Localização: Lisboa - Portugal
Offline

Bem pelo q sei, não é possível determinar por q o Garbage Collection não limpa na hora.

Mais ou menos assim, tu executa o método, e ele coloca numa lista tudo q tem q ser removido da memória, mas não vai remover já, vai remover quando for uma boa altura, e ai começa a remover, mas pode não remover tudo de uma vez, depende, o Garbage Collection faz tudo de maneira a não influenciar o desempenho da aplicação, por isso ele vai fazendo estas tarefas nas brexas.

Qualquer coisa me corrijam por favor, tb não tenho a certeza absoluta se é assim, mas é a idéia q tenho.

http://www.cajuscript.org
http://eduveks.blogspot.com
[Email] [WWW]
thiagomont
JavaChild

Membro desde: 02/05/2007 00:49:04
Mensagens: 139
Offline

Complementando a resposta do eduveks realmente não é possivel determinar quando será executado por ser uma thread de baixa prioridade.

Ao executar o System.gc() o sistema operacional é que vai determinar se será executado no mesmo momento ou não.



Thiago Amaral Monteiro
Analista de Sistemas - SERPRO
maquiavelbona
JWizard
[Avatar]

Membro desde: 29/06/2006 09:06:51
Mensagens: 2447
Localização: São Paulo - SP
Offline

Só fazendo um adendo. Não há um padrão para execução do GC e mesmo quando "sugeres" a ele rodar, não há garantias que ele fará naquele momento. Os objetos só são recolhidos definitivamente na segunda vez que o mesmo rode. Na primeira vez, ele marca para coleta todos os objetos que podem ser coletados, na segunda vez ele executa o método finalize() do objeto e o recolhe logo em seguida. Se por algum motivo o método finalize não permitir o recolhimento do objeto (por exemplo, refazendo a referência do objeto), o método não é executado uma segunda vez, mesmo que o GC seja executado mais N vezes.
Para mais informações, procurar no fórum, na parte de Artigos/Tutoriais por Garbage Collector.

Até!

----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)

"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781)
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team