Domanda

Sono riuscito a ottenere una 'perdita' di memoria in un'applicazione Java che sto sviluppando. Quando eseguo la mia suite di test JUnit esco casualmente dalle eccezioni di memoria (java.lang.OutOfMemoryError).

Quali strumenti posso usare per esaminare l'heap della mia applicazione java per vedere cosa sta usando tutto il mio heap in modo che io possa capire cosa trattiene i riferimenti agli oggetti che dovrebbero essere in grado di essere spazzati via.

È stato utile?

Soluzione

VisualVM è incluso nelle versioni più recenti di Java. Puoi usarlo per creare un dump dell'heap e guardare gli oggetti in esso.

In alternativa, puoi anche creare un commandine di heapdump usando jmap (nella tua directory jdk / bin):

jmap -dump:format=b,file=heap.bin <pid>

Puoi persino usarlo per ottenere un istogramma veloce di tutti gli oggetti

jmap -histo <pid>

Posso raccomandare Eclipse Memory Analyzer ( http://eclipse.org/mat ) per un'analisi avanzata dell'heap discariche. Ti consente di scoprire esattamente perché un determinato oggetto o insieme di oggetti è vivo. Ecco un post di blog che mostra cosa può fare Memory Analyzer: http://dev.eclipse.org/blogs/memoryanalyzer/2008/05/27/automated-heap-dump-analysis-finding-memory-leaks-with- one-click /

Altri suggerimenti

Se hai bisogno di qualcosa di gratuito, prova VisualVM

Dalla descrizione del progetto:

  

VisualVM è uno strumento visivo che integra gli strumenti JDK della riga di comando e funzionalità di profilatura leggere. Progettato sia per lo sviluppo che per i tempi di produzione.

Questa è una domanda piuttosto vecchia. Molte persone potrebbero aver iniziato a utilizzare IntelliJ da quando ha ricevuto la risposta. IntelliJ ha un plugin che può mostrare l'utilizzo della memoria chiamato Visualizzazione memoria debugger JVM .

Utilizza un profiler come JProfiler o YourKitProfiler

JProfiler ha funzionato molto bene per me ....

http://www.ej-technologies.com/products/jprofiler /overview.html

Utilizza Eclipse Memory Analyzer

Non esistono altri strumenti di cui sia a conoscenza di strumenti che si avvicinano alla sua funzionalità, alle prestazioni e al prezzo (gratuito e open source) durante l'analisi dei dump dell'heap.

Se stai usando un sistema che supporta GTK potresti provare a usare JMP .

Puoi provare il rilevatore di perdite di memoria che fa parte della suite di strumenti JRockit Mission Control. Ti consente di ispezionare l'heap mentre la JVM è in esecuzione. Non è necessario scattare istantanee in ogni momento. Puoi semplicemente connetterti online a JVM e quindi vedere come l'heap cambia tra le raccolte di rifiuti. È inoltre possibile ispezionare oggetti, seguire graficamente i riferimenti e ottenere tracce di stack da dove l'applicazione sta allocando gli oggetti. Ecco una breve introduzione .

Lo strumento è gratuito per lo sviluppo e puoi scaricarlo qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top