Java heap space - Estouro de memória

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.