Fiz um projeto em minha máquina que possui 2GB de RAM e nunca vi problema nenhum ao rodá-lo.
Ele usa Banco de Dados MySQL via Hibernate e é instalado via Advanced Installer.
Mas ao testar em outra máquina, tomei um susto!
O programa começou a travar conforme eu ia acessando o BD!
E não é problema no código! Pq se eu fechar e abrir de novo todo o programa, ele abre qualquer frame normal, mas se começo a acessar todos um depois do otro… chega uma hora que ele trava!..
Por curiosidade dei um CTRL+ALT+DEL para ver como estava o processo…
Ai que tá…
O programa só ia aumentando o uso da memória mais e mais!!.. foi até 100.000k que é onde eu percebi que dpois disso ele n abre mais nada!
Conclusão: A certeza que tenho é que ele ta guardando tudo o que eu faço em cache… e ai é claro, chega uma hora q ele estora a pilha né…
Mas a pergunta: Como eu corrijo isso?
Como eu esvazio a pilha de cache?
Gente, alguém me dê uma luz, por favor!
To fkano locoo…
Tenho que entregar o projeto nesse fim de semana…
Cara, esse teu problema é muito complexo, você vai ter que debugar muito bem a tua aplicação pra descubrir exatamente o que está acontecendo, e provavelmente você vai ter que fazer várias alterações pra corrigir.
Lembre que a JVM só limpa a memória quando o objeto não tiver mais nenhuma referencia, então você vai ter que procurar por objetos que ainda são referenciados, e por quem eles são referenciados.
Veja se não tem nada estático no teu programa que guarda as telas, porque geralmente as telas listam as consultas do banco (eu acho) e essa lista de objetos deve ficar guardada em algum lugar e não eh limpa.
uma coisa que que poderia ajudar, é quando você tiver saindo de uma tela, limpar a JTable e a List onde você armazenas os objetos listados, caso você faça isso.
Olhe me desculpe, mas geralmente se o programa não tá rodando direito, ou consumindo muita memória, isso é código sim.
Veja se você está fechando as conexões, e os Statements e ResultSets da maneira apropriada (dentro de um bloco finally).
Não sei se é o caso, mas, evite trazer todos os registros do banco e carregálo em memórira, terminou de usar a lista, então limpe-a (list.clear() ) e depois dete a sua referência para null (lista = null).
Use StringBu*er (Builder ou Buffer, vai depender do caso!) para concatenação de strings (e nada de fazer texto.append("oi meu nome é " + nomePessoa) use texto.append("oi meu nome é ").append(nomePessoa) )
Essas são apenas algumas dicas para fazer um código menos comedor de recurso, acho que isso é um bom passo!
Abraços
Não vejo problema em concatenar Strings.
O compilador da Sun automaticamente converte toda a concatenação para uma única String.
Faça o teste. Concatene várias strings… compile o código e depois use um descompilador.
Acho q o StringBuffer/Builder deixa o código muito poluído. Aquele monte de append é algo que não me soa bem.
[quote=marcelo_mococa]
Não vejo problema em concatenar Strings.
O compilador da Sun automaticamente converte toda a concatenação para uma única String.
Faça o teste. Concatene várias strings… compile o código e depois use um descompilador.
Acho q o StringBuffer/Builder deixa o código muito poluído. Aquele monte de append é algo que não me soa bem.[/quote]
StringBuilder não serve para diminuir o consumo de memória, ele serve para aumentar o desenpenho, faça um teste contatenando umas 30 Strings usando + e depois com StringBuilder que você vai ver a diferença de tempo.
Use StringBu*er (Builder ou Buffer, vai depender do caso!) para concatenação de strings (e nada de fazer texto.append("oi meu nome é " + nomePessoa) use texto.append("oi meu nome é ").append(nomePessoa) )
[/quote]
Não vejo problema em concatenar Strings.
O compilador da Sun automaticamente converte toda a concatenação para uma única String.
Faça o teste. Concatene várias strings… compile o código e depois use um descompilador.
Acho q o StringBuffer/Builder deixa o código muito poluído. Aquele monte de append é algo que não me soa bem.[/quote]
Pois é eu vejo, o processamento cai muito! Tanto é que é unanimidade utilizar StringB* ao invés de concatenar strings na “old fashion way”.
Faça um teste, concatene um texto simples umas 10.000 vezes usando string e depois usando stringbuilder ou até mesmo o buffer que possui os seus métodos sincronizados e me diz qual foi o mais rápido!
Então pessoal, quanto ao comentário de vocês, não sabia que o singleton poderia ser a causa da lentidao… o que vocês me recomendam? Eliminar o singleton? Será que vai surtir efeito?
Agora quanto a esses lances de concatenação de strings eu quase nem uso isso…