Ola pessoal,
Estou com um probleminha muito chato. Estou desenvolvendo uma aplicação Web que em uma de suas operações são instanciados vários objetos em memória. Quando executava esta função ocorria uma exceção de estouro de memória “OutOfMemoryError”. Depois que dei uma “enxugada” no código o problema foi aparentemente solucionado, mas se esta mesma função for executada 3 ou 4 vezes seguidas na aplicação ocorre o mesmo erro de estouro de memória.
Em C a memória deve ser alocada e desalocada explicitamente o que não acontece com java, onde o coletor de lixo “garbage” de tempos em tempos verifica os objetos desreferenciados e limpa a memória. Só que no caso da minha aplicação entre uma solicitação e outra o coletor de lixo parece não esta sendo acionado. Existe formas de aciona-lo explicitamente com “System.gc”, mas esta função tem prioridade baixa sobre vários processos e parece não esta adiantando de nada.
Eu já não sei mais o que fazer…alguém pode me dar uma luz?
Desde já agradeço a atenção!
dar mais memória pro Tomcat. :roll:
Mateus…
Eu já tinha feito isto inserindo a seguinte linha no catalina.bat do Tomcat:
set CATALINA_OPTS=-Xms64m -Xmx1024m
O meu micro tem 1GB de RAM, mas isto não adiantou!
Reduzi o Xmx para 512 e depois para 700 e nada!
O que seria uma solução para mim seria desalocar um objeto de memória explicitamente (uma especie de metodo free() de c), mas em java ainda não consegui nada que realiza-se algo parecido, na verdade acho que não tem.
Bom se alguém souber de alguma coisa por favor me ajude
Desde já obrigado!
bom cara nesse caso eu acho melhor dar uma revisada no teu código pra ver em que pontos tu pode economizar na memória… tu deve ter algum processo ai que talvez esteja em loop infinito, ou muitas instanciações de objetos de granularidade grossa… tem q da uma aparada nisso :roll:
Cara!!!
PAGINAÇÃO!!
É a unica solução!
hahah
Paginação deve realmente resover o meu problema pelo menos em parte. Vou dar uma pesquisada para ver como faz isto em java pois eu nunca implementei. No entanto me lembrei de uma coisa que deve contribuir muito também, (e eu não me perdou por ter esquecido disto), é que nós podemos implementar nos nossos Beans o método destroy() que destroi o objeto liberando assim o espaço em memória.
Isto só não resolve totalmente o meu problema por que as classes da API como ArrayList, Hashtable e etc, não implementam o método destroy.
Mas valeu pelas dicas.
Abaixo segue um exemplo do método destroy.
public void destroy() {
this.destroy();
}