Estouro na memoria do Heap  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
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.
ViniGodoy
Moderador
[Avatar]

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
[WWW]
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?
ViniGodoy
Moderador
[Avatar]

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
[WWW]
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!!
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...
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team