Memória Java

Pessoal tenho um sistema em java gerado pelo Genexus onde é criado um .jar, até aí normal, quando eu inicio o sistema ele consome 20Mb de memória, ótimo, porém ao entrar e sair das telas esta memória vai aumentando (mesmo entrando e saindo da mesma tela) em locais de muita movimentação o consumo de memória está sendo muito alto, já tentei algo do tipo:


java -Xmx40 %1 umnu0000

mas sem sucesso, alguém tem alguma sugestão?
Obs.: Todos os clientes rodam via citrix no server, logo é comprometedor alocar muita memória para os clintes.

Acho que você pode começar tentando otimizar o seu código para que ele consuma menos memória.

Uma das desvantagens do Java é exatamente essa, o consumo de memória, mas, graças ao gerenciamento dinâmico de memória, dificilmente ocorrem vazamentos de memória.

Inté.

Aplicação desktop, né?

  1. Profiler: Utilize um profiler para ver que objetos estão em memória e não deveriam

  2. Escreva a aplicação de novo e esqueça geradores deste tipo

Eu fico com a 2.

Agradeço o conselho, mas tirar a ferramenta neste caso não é uma opção válida, eu precisaria mesmo é travar o consumo de memória

Uma coisa chata do Java 5.0 é que ela tem um recurso de compartilhar entre diversas instâncias de vários programas Java uma parte da memória consumida (procure um arquivo classes.jsa no JRE), mas acho (não tenho certeza; procure por "Class Data Sharing: http://java.sun.com/j2se/1.5.0/docs/guide/vm/class-data-sharing.html e leia o artigo direito) que isso é por usuário, ou seja, se você vai rodar um sistema com diversos clientes em “thin clients” você talvez não vá obter o benefício do compartilhamento da memória.

Olá

Provavelmente há memory leaks. Utilize um profiller como recomendou o Phillip.

Não sei para que serve um rodão na área de TI, mas se seu sistema usa applet ou Java Web Start, não se esqueça de usar index quando criar o jar.

[]s
Luca