2011-09-21 11 views
5

Per favore, c'è un modo per ottenere la cronologia degli oggetti (i loro nomi variabili o almeno di classe) che sono stati raccolti in Java?Come vedere quali oggetti sono stati raccolti in garbage collection in Java?

Solo l'aggiunta di questi params (a Oracle JVM)

-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps 

non prevede nulla di memoria altra cosa in byte. È un aiuto molto limitato per me. Grazie per tutte le risposte.

Nota: la soluzione alternativa con il metodo aggiungi finlize() non è per mia sfortuna un'opzione (non ho accesso ad essa).

risposta

3

Disclaimer: La mia azienda sviluppa lo strumento che raccomando in questa risposta.

In JProfiler è possibile passare alla vista "Oggetti registrati" nella sezione memoria e impostare la modalità di liveness su oggetti garbage collection (Visualizza-> Cambia modalità Liveness-> Garbage Collected Objects). Vedrai quindi una statistica di oggetti che sono stati GCed.

enter image description here

+1

Grazie. JProfiler sembra fantastico ma 450 € è troppo costoso –

+0

C'è un modo per elencare le classi in modo programmatico? Stavo passando per il pacchetto java.lang.Management ma può restituire solo il conteggio. – meexplorer

+0

Intendi in JProfiler o in un MBean JDK? –

3

È possibile utilizzare il metodo finalize da Object. Questo metodo viene chiamato quando l'oggetto sta per essere sottoposto a GC. Da qui, puoi registrare le informazioni che ti servono.

0

Stai cercando una perdita di memoria?

Se si implementa il metodo finalize() (disponibile in ogni Object) verrà chiamato prima che l'oggetto venga sottoposto a garbage collection e sia possibile eseguire qualsiasi codice al suo interno.

Se si sta cercando una soluzione sistematica (o non si ha accesso alle classi che si desidera monitorare), non sono a conoscenza di alcuna opzione JVM che consenta di farlo. Tuttavia, è possibile che le classi di registro vengano caricate e scaricate (GCed), ma questo non è ciò che si sta chiedendo.

-2

C'è una bella strumento integrato nel JDK per osservare JVM in fase di esecuzione. È jvisualvm. C'è un un buon riferimento con screenshot: http://visualvm.java.net/description.html

Qui è uno di loro: enter image description here

Speranza che aiuta.

+1

jprofiler è uno strumento utilizzato molto potente e comune, ma è gratuito solo per opensource e la licenza standard per singola istanza costa denaro reale - $ 500. Potrebbe essere un problema per alcuni progetti. – BrownFurSeal

+1

Conosco e utilizzo VisualVM ma non supporta la visualizzazione di oggetti garbage collection. –

+0

Questo è uno strumento utile, ma non risponde a questa particolare esigenza. –