Java heap space!

Bom dia pessoal,

Estamos desenvolvendo uma aplição web e quando estamos testando, após um certo tempo de uso, o servidor (tomcat 5.5) lança uma exeção com a seguinte mensagem: “Java heap space” e apartir dai, um abraço, cai a aplicação. Eu vi o pessoal comentando sobre o que poderia ser isso em outros sites e foruns onde eles mencionam a possibilidade da aplição estar acessando um arquivo muito grande, com uma foto por exemplo ou realizando uma operação muito grande com uma string, mas na nossa aplicação nós não estamos acessando nenhum tipo de arquivo e nem fazendo nenhuma operação com strings muito grandes, nós só usamos string para representar os tipos textuais dos beans e como retorno dos métodos da regra de negócio. Será que alguém pode dar uma mão pra gente ?

Desde já muito obrigado a todos pela atenção !

Você pode aumentar um pouco o heap space, alterando um dos parâmetros do Tomcat (procure nos scripts de inicialização a instrução -Xmx e aumente o espaço), mas isso também pode ser sintoma de um problema latente em uma das aplicações, como conexões a bancos de dados que não são encerradas, ou outras estruturas de dados cujo espaço não é corretamente liberado após seu uso. Se você estiver usando o Tomcat com Java 6.0 você pode usar o jmap para gerar um “dump” da memória usada pelo Java, e jhat para gerar um relatório dos objetos.
Exemplo de um relatório gerado pelo jhat para um Eclipse 3.2 rodando sob Java 6.0:

http://localhost:7000/histo/

Heap Histogram

All Classes (excluding platform)
Class 	Instance Count 	Total Size
class [C 	163679 	12453334
class [B 	7994 	3279542
class java.lang.String 	138850 	2221600
class [I 	24519 	2106516
class [Ljava.lang.Object; 	15918 	1128440
class java.util.HashMap$Entry 	46778 	748448
class [S 	9298 	743934
class [Ljava.util.HashMap$Entry; 	3394 	741396

Aqui estamos vendo que 12.453.334 bytes são gastos em 163.679 arrays de caracteres ("[C"), por exemplo.

Então, é verdade mesmo, eu estava pensando em aumetar o espaço de memória que a jvm pode usar, mas acredito que isso seja um sintoma de que alguma parte da aplicação não está legal. Você mencionou um ponto que eu não tinha pensado, que é a questão da liberação dos objetos de persistencia, vou verificar se essa parte do projeto está funcionando corretamente, dai eu posto a resposta aqui novamente.

Muito obrigado pela ajuda !