bem, estou com alguns codigos aq e vejo q eles consomem bastante memoria na parte de psquisa, vou mostar como eu fiz aqui e voces poderao dizer oq fiz de errado q esta fazendo com que haja vazamento de memoria
isso aq fica no pacote dao:
[code]public List consultarTabela() {
session = ConnectDB.getInstance();
List list = null;
iterator = dao.consultarTabela().iterator();
String nome;
String cpf;
String datac;
modelo.addColumn("Nome");
modelo.addColumn("CPF ou CNPJ");
modelo.addColumn("Data de Cadastramento");
ids = new int[dao.consultarTabela().size()];
int x = 0;
while(iterator.hasNext()) {
cliente = (Cliente) iterator.next();
ids[x] = cliente.getID();
nome = cliente.getNome();
cpf = cliente.getCpf();
datac = cliente.getDataC();
String[] linha = {nome, cpf, datac};
modelo.addRow(linha);
x++;
cliente = null;
linha = null;
nome = null;
cpf = null;
datac = null;
}
iterator = null;
System.gc();
esse iterator eh global, mas depois de usar dou um = null; nele.
o que estou fazendo de errado que esta deizando com que minha aplicação consuma bastate memoria depois de varias consultas como essas ao banco de dados?
Não dá para saber muito baseado no c;odigo que você postou mas você não deveria precisar chamar System.gc(), além do que duvido que ele esteja fazendo qualquer coisa util neste caso.
De qualquer modo, o que é bastante memória? Como o consumo de memória se comporta? Em quanto tempo você passa a ter problemas?
vou dar uma pesquisada sim no google, estou um pouco sem tempo, mas depois posto aq oq consegui
se eu fizer varias consultas sucessivas ao bando de dados em poucos minutos ele estora a memoria de 512 e fica extremamente lento ai quando fecha o programa libera uma grande quantidade de memoria…
[quote=Hammer]bem, estou com alguns codigos aq e vejo q eles consomem bastante memoria na parte de psquisa, vou mostar como eu fiz aqui e voces poderao dizer oq fiz de errado q esta fazendo com que haja vazamento de memoria
[/quote]
Se vc só quer iterar os dados porquê vc precisa de todos os dados ao mesmo tempo ? Não precisa. Vc só precisa de um de cada vez.
Tudo bem que a sua persistencia está ligada a OO, mas isso é um tiro no pe quando tem muitos dados.
Use o padrão Fastlane para resolver o seu problema.
tava dando uma olhada e parece q pode resolver meu problema, mas essa class Factory serve pra qd eu tenho uma super class e varias sub-class n eh? so q no meu sistema isso nao existe, cocmo faço entao?
Monte seu projeto no Netbeans e use o profiler.
Eu também trabalho com Eclipse, mas tenho que admitir que o profiler do Netbeans é excelente, e muito fácil de usar.
Não adianta “chutar” a posição do vazamento de memória.
A factory referida é apenas uma forma de dizer que tem que existir alguem que lê o ResultSet e cria um objeto a partir desses dados.
Factory é um padrão possivel para isso. Mas o método pode ser simplesmente um método da própria classe Fastlane , embora isso não siga o principio de separação de responsabilidade que o codigo mostrado tenta seguir.