2010-09-08 21 views
13

He estado utilizando la herramienta de análisis de memoria Eclipse para examinar un volcado de heap. No he visto ningún caso en el que un objeto se mantuviera vivo con una variable local en una pila de subprocesos.¿Incluye un volcado del heap Java pilas de hilos

¿Las pilas de hilos de java se conservan en los volcados del montón? Si no, ¿estos objetos se cuentan como objetos inalcanzables en el volcado? Si es así, ¿hay alguna forma de preservar las pilas de hilos para que la basura no recogida se pueda distinguir de los valores de las variables locales?

Respuesta

12

Montón de vertederos más reciente de JVM (a partir de 2010) incluyó las pilas de subprocesos. Eclipse Memory Analyzer 0.8 (lanzado en enero de 2010) incluye soporte para extraer esta información: http://www.eclipse.org/mat/0.8/noteworthy.html

1

No, las pilas de subprocesos están separadas de los volcados de montón.

¿Cómo estás haciendo los volcados del montón? jmap? De ser así, de forma predeterminada, only live objects are dumped. Esto significa que no verá objetos inalcanzables. Parece que tienes una pérdida de memoria o algo así. Recomendaría usar JVisualVM o un generador de perfiles más sofisticado.

0

un objeto es ciertamente alcanzable incluso si solo una variable local lo hace referencia. intente esto:

MyClass 
    main 
     obj = new ... 
     obj.doSomethingThatTakes30Minutes() 

obj shoudl aparecen en el volcado del montón.

6

Los rastreos de pila no se conservan pero se conservan las referencias a objetos en la pila.

SELECT DISTINCT * FROM OBJECTS (SELECT OBJECTS 
${snapshot}.getOutboundReferentIds(thread.getObjectId()) 
FROM INSTANCEOF java.lang.Thread thread) 

Esta consulta OQL selecciona todos los objetos contemplados por hilos de Java (java.lang.Thread y subclases). Este conjunto incluye todas las variables locales de Java junto con cualquier otro objeto al que hagan referencia las instancias de subprocesos de Java.

+0

Su consulta tiene un error de sintaxis en 'visualvm' y' jhat'. ¿Puedes arreglarlo? – gavenkoa

+0

Parece que esta consulta para Eclipse MAT. – gavenkoa

Cuestiones relacionadas