Metodo System.gc();  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Narj-j2ee
HelloWorld
[Avatar]

Membro desde: 26/08/2009 11:26:28
Mensagens: 13
Offline

Pessoal com o uso do metodo System.gc(); que elimina objetos não usadoos! Quanto a isso gostaria de saber!

- isso traz ottimização ao codigooo?
- quando é usado ?
- á exemplo de algum codigo ?

- Garbage Collector = " Coletor de Lixo Java ".

// ATT ();

This message was edited 1 time. Last update was at 29/09/2009 12:53:33

Felagund
GUJ Master
[Avatar]

Membro desde: 26/07/2006 11:51:36
Mensagens: 1732
Localização: Santa e Bela Catarina
Offline

Não use System.gc()

O Garbage Collector funciona normalmente sem a interferencia dos desenvolvedores, se estive com algum problem é sua aplicação que está com um gargalo que deve ser tampado

[]'s

att
Rafael Felix

Rolling With Code
Twitter
[WWW]
Bruno Laturner
GUJ Expert
[Avatar]

Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline

Favor usar uma fonte normal de texto...

1) Não traz otimização, aliás é melhor evitá-lo. A JVM que sabe a melhor hora de fazer coleta de lixo
2) Um caso que conheço de uso é quando você quer apagar um arquivo, e a JVM fala que o arquivo ainda está em uso pelo sistema, mesmo que não esteja. Um jeito de contornar é usar o System.gc() antes do file.delete(). Melhor mesmo seria fazer isso numa nova tentativa de apagar o arquivo.
3) Exemplo não tenho, é só usar.

A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline

Realmente, como os colegas falaram, não traz otimização.

Repare também que a documentação do método diz que a VM não é obrigada a executar o garbage collector assim que o comando é chamado. Esse comando é só uma sugestão.

Esse comando é útil em algumas situações, geralmente muito específicas. Por exemplo, entre uma fase e outra de um jogo, ou antes de exibir um vídeo. Assim você reduz as chances de haver uma coleção de lixo longa no meio da sua tarefa principal. Para aplicações comerciais no geral, não vejo nenhum motivo para usa-lo.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Narj-j2ee
HelloWorld
[Avatar]

Membro desde: 26/08/2009 11:26:28
Mensagens: 13
Offline

Onde eu encontro a documentação dos metodos?

OBG.
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Online

Pode usar sim. Usando esse método você estará forçando a coleta de lixo. Em algumas aplicações, pode-se ganhar performance, se puder evitar o acumulo de objetos na memória. O gc pode demorar alguns segundos realizando trabalho em grandes coletas.


exemplo:


método que lê imagens de um stream de video e as filtra.




Agora não compensa usar, se, a sua aplicação não requer tempo crítico de processamento. É melhor a máquina virtual realizar automaticamente.


Esse link pode ser útil:

http://www.roseindia.net/javatutorials/determining_memory_usage_in_java.shtml

This message was edited 2 times. Last update was at 29/09/2009 13:27:50


www.citrox.com.br
Bruno Laturner
GUJ Expert
[Avatar]

Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline

Documentação:

http://java.sun.com/javase/6/docs/api/index.html?java/lang/System.html#gc%28%29

A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline

juliocbq wrote:Pode usar sim. Usando esse método você estará forçando a coleta de lixo.


Só reiterando, você não está forçando, está apenas sugerindo. É muito raro a VM ignorar o comando (pelo menos a da sun).

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Online

ViniGodoy wrote:
juliocbq wrote:Pode usar sim. Usando esse método você estará forçando a coleta de lixo.


Só reiterando, você não está forçando, está apenas sugerindo. É muito raro a VM ignorar o comando (pelo menos a da sun).

A vm pode ignorar o comando?

www.citrox.com.br
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Online

Calling the gc method suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse. When control returns from the method call, the Java Virtual Machine has made a best effort to reclaim space from all discarded objects.


É verdade. Não havia lido corretamente a documentação. Mas é meio estranho sugerir, não!? As vezes, nós precisamos.

This message was edited 1 time. Last update was at 29/09/2009 13:32:03


www.citrox.com.br
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline

juliocbq wrote:
ViniGodoy wrote:
juliocbq wrote:Pode usar sim. Usando esse método você estará forçando a coleta de lixo.


Só reiterando, você não está forçando, está apenas sugerindo. É muito raro a VM ignorar o comando (pelo menos a da sun).

A vm pode ignorar o comando?


Pode sim. Pelo menos é o que diz a documentação.
Nunca vi isso ocorrer.

Ah, fui dar uma olhada no artigo que você falou, mas ele me pareceu meio antigo (2001). Será que o que está lá ainda vale? O garbage collector é um dos códigos onde a sun dedica maior parte da sua atenção.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

Sim.

System.GC() não invoca o método que coleta o lixo, ele simplesmente sugere a JVM que aquela é uma boa hora para fazer essa coleta por que tem lixo a ser coletado e provavelmente mais pra frente isso pode ficar pesado.

Mas nada garante que será invocado.

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
Bruno Laturner
GUJ Expert
[Avatar]

Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline

Como o ViniGodoy disse, não há nenhuma garantia. Ou mais especificamente, não há garantias que ela vá rodar na hora que foi chamada.

Ela pode ignorar o comando se há uns microsegundos atrás ela já fez o GC Full. Não tem por que rodar duas vezes seguidas.

A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline

juliocbq wrote:É verdade. Não havia lido corretamente a documentação. Mas é meio estranho sugerir, não!? As vezes, nós precisamos.


Estranhíssimo. Mas a sun nunca abriu mão do direito único e exclusivo que a VM tem de controlar o gc.
Já foram feitos pedidos para criar comandos que suspendam o gc, ou que forcem sua execução, mas implementações disso sempre foram negadas.

A próxima versão de garbage collector vai trazer modificações importantes, que a princípio o tornará apto a aplicações de tempo real. Mesmo nessa versão, será impossível forçar o gc a fazer qualquer coisa. Se quiser ler mais sobre ela:
http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-5419&yr=2008&track=javase

This message was edited 1 time. Last update was at 29/09/2009 13:36:06


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline

Me enganei, o link que você vai gostar de ver é esse aqui:
http://research.sun.com/jtech/pubs/04-g1-paper-ismm.pdf

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team