Tenho uma aplicação em web que fica buscando código fonte em diversas páginas web.
Porém está estourando a memoria da JVM, gostaria de saber com faço para gerencia isto, algum plugin para Eclipse Ganymede que me auxilie para verificar onde está o problema e quais objetos que estão consumindo muita memória.
Use a visualjvm, para fazer um profiler do software. É algum memory leak que você deixou passar, tipo uma lista que está aumentando de tamanho, ou algum string…
Pelo profiler dá para ver os objetos que estão ocupando mais memória.
F
falefernando
O visualjvm é um plugin ou uma ferramenta da Sun que é a implementação Java que eu utilizo.
F
falefernando
Na minha Classe de Cadastro tenho diversos atributos do tipo List de outras classes, com o visualjvm consigo identificar quais objetos estão perdidos na memória e que o GC não consegue eliminá-los?
Obrigado pela atenção.
R
rmendes08
Necessariamente esses objetos não precisam estar perdidos. Se você adicionar objetos em uma lista, de dento de um loop, eles não estão perdidos, estão referenciados e portanto não podem serem coletados. Se o loop for infinito ou muito grande, você pode esgotar a memória.
F
falefernando
Acho que aí está o meu problema.
Tenho um método sendo executado com o seguinte código.
Esta classe processadora possui diversas referências para outras classes com atributos do tipo List, mas toda vez que dentro do loop é executado a instrução Processadora processadora = new Processadora();
o GC não deveria limpar esses objetos ?
R
rmendes08
Não necessariamente, em algum lugar pode ter alguém fazendo referência a esses objetos, dentro do método processaBaseEstabelecimento. Além do mais, vê-se que você espera IOException e SQLException. Provavelmente, dentro desse método você tenha que alocar recursos de I/O, redes, etc. que não são liberados apropriadamente. O mais adequado é você ter um bloco finally e fornecer meios para liberar esses recursos, que pode ser outra causa de vazamento de memória.