Como posso ver o que está na minha pilha em Java?
-
02-07-2019 - |
Pergunta
Eu consegui obter uma memória 'vazamento' em um aplicativo java que estou desenvolvendo. Ao executar o meu conjunto de testes JUnit eu aleatoriamente obter fora de exceções de memória (java.lang.OutOfMemoryError).
Que ferramentas posso usar para examinar a pilha de minha aplicação java para ver o que está usando toda a minha pilha para que eu possa trabalhar para fora o que está mantendo referências a objetos que deve ser capaz de ser lixo coletado.
Solução
VisualVM está incluído na maioria dos lançamentos recentes de Java. Você pode usar isso para criar um despejo de pilha, e olhar para os objetos nela.
Como alternativa, você também pode criar um commandine heapdump usando jmap (em sua jdk / dir bin):
jmap -dump:format=b,file=heap.bin <pid>
Você ainda pode usar isso para obter um histograma rápida de todos os objetos
jmap -histo <pid>
Posso recomendar Eclipse Memória Analyzer ( http://eclipse.org/mat ) para análise avançada de pilha lixões. Ele permite que você descobrir exatamente por que um determinado objeto ou conjunto de objetos está vivo. Aqui está uma entrada de blog mostrando o que de Memória Analyzer pode fazer: http://dev.eclipse.org/blogs/memoryanalyzer/2008/05/27/automated-heap-dump-analysis-finding-memory-leaks-with- one-click /
Outras dicas
Se você precisa de algo livre, tente VisualVM
Pela descrição do projeto:
VisualVM é uma ferramenta visual integração de ferramentas de linha de comando do JDK e capacidades de perfis leves. Projetado tanto para desenvolvimento e produção o uso do tempo.
Esta é uma pergunta muito velho. Um monte de pessoas pode ter começado usando IntelliJ desde que foi originalmente respondeu. IntelliJ tem um plugin que pode mostrar o uso de memória chamado JVM Debugger memória Ver .
Use um profiler como JProfiler ou YourKitProfiler
JProfiler funcionou muito bem para mim ....
http://www.ej-technologies.com/products/jprofiler /overview.html
Use a Eclipse Memória Analyzer
Não há nenhuma outra ferramenta que eu estou ciente de qualquer ferramenta que chega perto de sua funcionalidade e desempenho e preço (livre e de código aberto) ao analisar pilha despejos.
Se você estiver usando um sistema que suporta GTK você pode tentar usar JMP .
Você pode tentar o detector de vazamento de memória que faz parte do JRockit Mission Control Suite ferramentas. Ele permite que você para inspecionar a pilha enquanto o JVM está em execução. Você não precisa para tirar fotos o tempo todo. Você pode apenas se conectar on-line para o JVM e depois ver como a pilha muda entre coletas de lixo. Você também pode inspecionar objetos, siga referências graficamente e obter rastreamentos de pilha de onde o aplicativo está alocando objetos. Aqui está uma breve introdução .
A ferramenta é livre para usar para o desenvolvimento e você pode baixá-lo aqui .