| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/04/2009 07:30:13
|
Sink0
JavaBaby
Membro desde: 02/01/2009 13:18:30
Mensagens: 84
Offline
|
Eu ja postei uma vez com esse problema e codigo mas foi a muito tempo, e para naos er coveiro resolvi postar denovo e como meu codigo com algumas diferenças
Bom meu problema é o seguinte, a memoria do heap esta estouranda depois do meu programa rodar por umas 1 hora e meia. Como é uma mesma rotina que ele esta rodando sempre sem variar o numero de dados utilizados, suponho eu que a esta vazando memoria. Mas eu nao tenho ideia onde... Antes de postar o codigo vou explicar mais ou menos como ele funciona. É um programa para armazenar dados duranto o dia todo do WTR da BMF. Quando eu inicio o programa abre uma janela com 3 botoes, conecta, ON e OFF. Quando voce aperta o botao Conecta ele abre 2 IEs navega ate os respectivos sites e loga nos mesmos. Quando voce aperta ON ele inicia a rotina, e OFF desliga a rotina. A rotina esta rodando um um Thread separado para poder ser ligado e desligado inumeras vezes. Ok agora a rotina funciona mais ou menos assim. Ele da um refresh nos 2 IEs e armazena os dados coletados de tabelas em 2 matrizes, sendo que esses dados sao armazenados de um modo diferente que mostrado no site. Depois ele preenche uma linha de um txt chamado Ofertas.txt com o horario, ultimo negocio, e ofertas de compra e venda do ativo em questao. E armazena em outro txt chamado nlinhas.txt o numero atual de linhas do txt Ofertas.txt (esses txt serao utilizados em um programa C mais para frente mas isso nao vem ao caso). Depois disso ele reinicia a rotina. Essa rotina dura em torno de 10 segundos. O meu codigo é o seguinte:
PS: Esse programa nao sera destribuido ou vendido, sera apenas para uso proprio.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/04/2009 08:55:26
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 19455
Localização: Curitiba/PR
Offline
|
Use um profiler para descobrir onde está o problma.
Também é uma boa para rodar o programa com a seguinte opção na VM:
-XX:+HeapDumpOnOutOfMemoryError
Isso fará que o Java gere um arquivo de dump da memória (.dmp), antes de sua aplicação falhar pelo OutOfMemoryError. Esse dump vc pode abrir no profiler do Netbeans, e ver exatamente onde o problema está.
|
@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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/04/2009 11:21:03
|
Sink0
JavaBaby
Membro desde: 02/01/2009 13:18:30
Mensagens: 84
Offline
|
Bom eu nao gerei a dump, mas pelo profiler do netbeans eu pude ver que o que ta vazando memeoria seriam o java.lang.ref.Finalizer, o java.util.HashMap$Entry e o java.util.HashMap$Entry[]. Os dois primeiros estao em disparado usando mais bytes.... Alguma ideia dado essa informacao?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/04/2009 11:45:27
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 19455
Localização: Curitiba/PR
Offline
|
Ligue a opção de rastrear as alocações no Stack. Uma boa também é abrir as instâncias do entry e ver que objeto está associado a elas. Normalmente, no caso de leaks, vc verá repetições centenas de vezes da mesma classe.
Por fim, procure também o local onde esses mapas são usados no seu código, em que rotina são chamados, etc.
|
@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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/04/2009 17:02:08
|
Sink0
JavaBaby
Membro desde: 02/01/2009 13:18:30
Mensagens: 84
Offline
|
Eu nao sei fazer nenhuma das duas coisas haha.. alguma indicaçao de como fazer?
vlew!!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2009 18:10:41
|
Sink0
JavaBaby
Membro desde: 02/01/2009 13:18:30
Mensagens: 84
Offline
|
Entao .. eu nao consegui essa opcao de rastrar as alocacoes do stack.. onde ela fica no NetBeans? Como eu vejo as isntancias do entry?
Esses mapas devem tar sendo utilizados numa API que eu uso chamada juffie.. que usa uma outra chamada Jacob que meche com JNI. Eu usso isso para pegar informacoes de um IE...
|
|
|
 |
|
|
|
|