Bom Dia
Galera
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.
Grato pela atenção.
Fernando
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.
O visualjvm é um plugin ou uma ferramenta da Sun que é a implementação Java que eu utilizo.
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.
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.
Acho que aí está o meu problema.
Tenho um método sendo executado com o seguinte código.
for(String estabelecimento : this.estabelecimentos){
if (ProcessaRunnable.isProcessando() == false) {
break;
}
try {
Processadora processadora = new Processadora();
processadora.processaBaseEstabelecimento(link + estabelecimento, conexao);
} catch (IOException e) {
System.out.println("Estabelecimento :" + estabelecimento);
} catch (SQLException e) {
System.out.println("Estabelecimento :" + estabelecimento);
}
}
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 ?
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.
Utilizo os seguintes pacotes
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
Qual a maneira de acompanhar este tipo de vazamento de memória no eclipse, existe algun plugin para que possa me ajudar ?
[quote=falefernando]Utilizo os seguintes pacotes
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
Qual a maneira de acompanhar este tipo de vazamento de memória no eclipse, existe algun plugin para que possa me ajudar ? [/quote]
Usa a jvisualvm sô. Vem com o jdk. Dá uma olhada na pasta bin dele.