Melhorar a performance da JVM

4 respostas
A

Pessoal,

Gostaria de saber onde eu encontro a documentação sobre como melhorar a performance da JVM. Pergunto isso pq dependendo de alguns processos que mando executar na minha aplicação, me retorna “OutOfMemoryError”.
Procurei na net alguma coisa, e encontrei alguns parâmetros que eu devo passar na hora de executar a jvm, mas gostaria de ir mais a fundo.
De início, coloquei a seguinte configuração e, se alguém souber, gostaria que me explicasse cada parâmetro e se é o ideal para um pc de 512MB.
Os parâmetros que passei foram os seguintes: “-Xms128m -Xmx256m -XX:PermSize=64m -XX:MaxPermSize=64m”.

[]´s
Aislan

4 Respostas

mister_m

A menos que você esteja construindo uma super hiper mega aplicação, com várias operações realmente pesadas e muitos, muitos usuários, você não precisa aumentar os parâmetros; você deve é corrigir a aplicação, pois ela está causando memory leaks.

Para isso, recomendo que você visite os seguintes blogs e veja a apresentação do JavaOne dos autores, que pode ser encontrada nos próprios blogs:

Edward Chou
Frank Kieviet

A

Bom dia “mister__m”

Muito obrigado pelas dicas, já dei uma olhada nos blogs q vc me indicou e achei bem legal tbem.
Vc me comentou que eu deveria dar uma revisada na minha aplicação, certo… pois bem, gostaria d lhe passar a situação onde isso ocorre e como estou procedendo para que não de o erro ‘OutOfMemoryError’.
Esse erro acontece qdo eu faço um select numa tabela que me retorna 22750 registros e joga-os numa coluna de um grid da seguinte forma:
Ex:

  • Eu busco os registros do campo código e jogo pro grid. OK

  • Eu busco os registros de qualquer outro campo e jogo pro grid. DÁ PAU!

    Cada campo que é adicionado ao grid, é aberta uma nova conexão, são instanciados uma ‘carrada’ de objetos e feito um select na base. Para tentar eliminar esse erro que está dando eu fiz o seguinte:
    Assim que um campo é adicionado no grid eu chamo um metodo cuja função é dá um close() na conexão, statement e resultset.
    Depois, outro metodo zera esses objetos(List, HashMap, etc…do um clear() nesses caras) q são criado durante o processo.
    Por fim, eu chamo o garbage collector (System.gc());

O q vc achas? Estou no caminho certo?

Estou precisando realmente de ajuda…

[]´s
Aislan

mister_m

Seu processo me parece bastante confuso, iniciando com o problema funcional. Pelo que entendi, você exibe um grid com mais de 20 mil registros pro usuário; o usuário nunca vai realmente visualizar todos os registros. Isso é um problema de projeto de interface. Você provavelmente precisa de uma busca mais refinada ou de suporte a paginação.

Depois, você faz um select por coluna do grid, pelo que entendi. Por quê? Não poderia popular com um select só?

Enfim, o que você fez (tirando o System.gc(), que é dispensável) deve até resolver o seu problema imediato, mas existem vários outros problemas conceituais com essa sua aplicação, pelo que estou entendendo, incluindo acesso a banco de dados.

Eu recomendo que você estude uma arquitetura melhor para sua aplicação em geral. Quando tiver tempo, estude um exemplo de aplicação desktop usando genesis, Swing/SWT/Thinlet e Hibernate chamado UserAdmin. Para mais informações, consulte a documentação do genesis em português.

A

Muito obrigado pelas dicas… Realmente esse sistema é bem complicado. É que eu peguei um sistema com mais de 2 anos de desenvolvimento e qdo entrei nessa empresa o carinha q desenvolveu saltou fora logo dpois, imagina a minha situação! (mas isso é outra história).
O fato é que consegui resolver o problema, e nessa altura do campeonado não sei se vale a pena mudar de arquitetura, mas independentemente eu vou estudar como vc me sugeriu!
Qto ao select, acho q tem q ser assim mesmo, pois digamos q eu arraste pro grid o campo produto, depois departamento e por fim o preço unitário… é um por vez, certo? Vc me sugereria d outra forma?
A respeito das paginações, realmente é dificil o usuário analisar um grid com tantos registros, para isso tem opções de filtro…mas pode acontecer! Uma tabela feita pela classe JTable tem como fazer paginação?
Me desculpe se faço algumas perguntas que possam parecer banais pra vc, mas é q estou engatinhando ainda em java…

[]´s
Aislan

Criado 17 de maio de 2007
Ultima resposta 21 de mai. de 2007
Respostas 4
Participantes 2