Identificar Objetos que estão alocados em Memória

5 respostas
B

Olá Pessoal,

Estou trabalhando em uma aplicação Swing.
Após um determinado tempo de uso, essa aplicação da o seguinte erro:
Exception in thread “AWT-EventQueue-0” java.lang.OutOfMemoryError: Java heap space

Entendo que este erro ocorre porque a Memoria está lotada de objetos e o GC não poder remove-los.

Por isso eu só gostaria de saber como é que faço para detectar que objetos são esses, para que eu possa entender o porque o CG não os estão removendo da Memória

Desde já agradeço a ajuda.

5 Respostas

L

Use o Eclipse Memory Analyzer

The Eclipse Memory Analyzer is a fast and feature-rich Java heap analyzer that helps you find memory leaks and reduce memory consumption.

Use the Memory Analyzer to analyze productive heap dumps with hundreds of millions of objects, quickly calculate the retained sizes of objects, see who is preventing the Garbage Collector from collecting objects, run a report to automatically extract leak suspects.

É a ferramenta para te mostrar seu problema. Você vai demorar um pouco para entender como usar, mas depois de aprender, vai usar para sempre…

Isso é algo que todo mundo deveria aprender a usar depois de fazer o Hello World…

F

Vc não precisa de ferramenta pq só existe um motivo para o GC não esta removendo da memória - VC ESTA SEGURANDO PONTEIRO!
Vc tem 2 caminhos a seguir:
1 - programação errada - sua aplicação precisa liberar os ponteiros sem uso.
2 - mais memória - se a aplicação realmente precisa de todos estes objetos na memoria, vc tem que aumentar a memoria da JVM na sua plataforma.
O erro é em produção?

L

FernandoFranzini, você quer ele faça a análise daonde está sendo segurado o quê na mão? Poxa, fala para ele compilar sem o eclipse também.

F

Ola Leo

Na minha opinião a arquitetura define uma media de 70% das falhas de memória. E vc não precisa de ferramentas para detectar isso…Por isso a recomendação é primeiro garantir boas práticas do que correr para ferramentas de monitoramento. No forum nos damos dicas, cada uma faz o que bem entender…

L

Concordo com seu ponto, FernandoFranzini, mas uma ferramenta de análise de memória é sempre importante no arsenal de um desenvolvedor. Melhor ele aprender a utilizar agora, do que quando o servidor de aplicações dele parar de funcionar pelo mesmo erro, daqui a algum tempo, e ele só ter o despejo de heap do servidor… (foi o que aconteceu comigo! ter de aprender a analisar memória com produção parado…)

Criado 22 de maio de 2011
Ultima resposta 23 de mai. de 2011
Respostas 5
Participantes 3