Java.lang.OutOfMemoryError: Java heap space

6 respostas
L

Boas pessoal ,

A minha app gerou me o seguinte erro :

Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space

Alguem me pode explicar porque isso acontece ?

Eu noto que este erro so me da quando a consulta que a minha app faz a base de dados, tras muitos dados ( Quando digo muitos sao mais de 1, 800 registos ) e com eles ele faz contas e etc.

Agradece desde ja a ajuda para resolver esta exception

Estou a usar o netbeans 5.5 com o java 1.5

6 Respostas

ricardolecheta

aumente a memoria da vm passando esses argumentos:

-Xms256m -Xmx512m

Adriano_Almeida

Cara, 1800 registros não são muitos. Talvez você possua muitos joins na sua consulta, o que a pode deixar realmente lenta e sobrecarregada. Pode ser também que esses cálculos que você diz fazer, estejam consumindo muitos recursos. Verifique os memory leaks possíveis nesse seu método.

Para uma solução imediata, faça o que o colega acima falou… Mas mesmo assim, verifique seu SQL se for mesmo o caso da consulta estar ocasionando isso, pois, senão você só estará adiando o problema.

nbluis

Cara, revise seu código.
Tente anular objetos desnecessários…
Não acho legal aumentar a memória por esta causa disso.

ViniGodoy

Você também pode usar um profiler para identificar se há ou não memory leaks. Tanto o profiler do Netbeans quanto o do Eclipse tem um analisador de memória, que mostra a quantidade de objetos instanciados em cada classe.

Após o erro, você pode olhar no profiler para ver se não existem “objetos demais” de uma determinada classe. As vezes, um pequeno bug no código (como no caso do meu código, que esqueci de dar clear numa lista) geram catastrofes como essa.

É muito melhor do que sair procurando por problemas desse tipo às cegas.

L

Pessoal,

primeira questão : Como faço para aumentar a memoria ( -Xms256m -Xmx512m) ? Nunca precisei fazer isso e nao sei como fazer .
PS. A minha app desktop esta posta em varias computadores da empresa, será esta opção de aumentar a ram do JVM viavel ? Funcionará em todas as maquinas ? tenho que pensar numa solução global, pois varias pessoas usam este programa.

segunda questão : Como posso verificar os os memory leaks possíveis dentro de uma ActionListener ( Porque esta exception se da quando pressiono um botao e ele chama um ActionListener, que esta connecta a base de dados )

terceira questão : nunca usei o profiler, e gostaria de saber como aceder a ele e como verificar os memory leaks.

Muito obrigado pela vossa ajuda ! espero que me ajudem a esclarecer este problema porque para mim esse problema é novo !

Obrigado mais uma vez !

ViniGodoy

Você usa o eclipse ou o netbeans?

Geralmente, depois de instalado, basta usar a opção de profile, que estará disponível na própria aplicação. No final, ela mostrará para você uma tabelinha, com o nome da classe e o número de instâncias daquela classe.

A instalação do profiler vai variar de acordo com a sua IDE. No caso do eclipse, você deve baixar o TPTP do próprio site, e seguir CUIDADOSAMENTE os passos da instalação.

O netbeans já tem um instalador, que pode também ser baixado do site. Existem também exemplos de uso, com vídeo inclusive, no próprio site.

O profiler serve para identificar leaks de memória, medir a performance dos métodos ou a cobertura do código (que métodos estão sendo chamados e que métodos não estão, muito útil para ver se seu JUnit está cobrindo todo seu código).

Criado 12 de abril de 2007
Ultima resposta 12 de abr. de 2007
Respostas 6
Participantes 5