Java HPROF heap dump campi mancanti?
Sto usando Eclipse Memory Analyser per visualizzare un file HPROF. Visualizza un numero diverso di campi per diverse istanze della stessa classe:
Sembra che i campi mancanti potrebbero non essere mai stati assegnati, ma qual era il valore in quei campi mancanti? Sono il valore "zero" o il valore dell'inizializzatore di campo?
Modifica:
JVM è Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)
Modifica 2:
Sembra che i campi mancanti non siano "zero" (come confermato attraverso debugging), ma probabilmente mai assegnato a.
La query OQL sottostante mostra che Eclipse Memory Analyser conosce effettivamente i valori reali in quei campi, ma ha semplicemente scelto di non visualizzarli...
2 answers
Secondo la Documentazione in formato HProftutti i campi dell'oggetto sono memorizzati nel dump, quindi MAT può conoscere il valore di tutti i campi dell'oggetto.
Finestra OQL
Per OQL vengono mostrati tutti i riferimenti tranne quelli, che hanno valore null.
Finestra albero dominatore Per me MAT mostra tutti gli attributi dell'oggetto nella finestra dell'albero dominatore.
Dal momento che l'idea dell'albero del dominatore è di avere acyclic graph MAT determinato che closeController possiede l'oggetto URLJarFile e non mostra questo attributo nella finestra principale.
Inoltre, significa che se ci sono diversi riferimenti forti all'oggetto particolare e il proprietario dell'oggetto non può essere identificato, l'oggetto non verrà visualizzato nell'albero del dominatore.
Considera l'attributo name nell'URLJarFile:
Se scegliamo "Oggetto Elenco -> con i riferimenti in entrata " possiamo vedere che questa stringa è referenziata da diversi oggetti:
Il problema è che la vista che stavo guardando dovrebbe solo elencare refereces dell'oggetto, quindi i campi null
oi valori primitivi non vengono mostrati.
La soluzione è aggiungere la vista "Inspector" o passare alla prospettiva dedicata "Analisi della memoria", che mostrerà i campi effettivi per ogni istanza selezionata, come mostrato negli screenshot di @Taky.