Java HPROF tas dump champs manquants?


J'utilise Eclipse Memory Analyser pour afficher un fichier HPROF. Il affiche un nombre différent de champs pour différentes instances de la même classe:

Il semble que les champs manquants n'aient jamais été affectés, mais quelle était la valeur de ces champs manquants? S'agit-il de la valeur "zéro" ou de la valeur de l'initialiseur de champ?

Modifier:

JVM est Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)

Modifier 2:

Il semble que les champs manquants ne soient pas "zéro" (comme confirmé par débogage), mais probablement jamais attribué.

La requête OQL ci-dessous montre que Eclipse Memory Analyser connaît réellement les valeurs réelles dans ces champs, mais a simplement choisi de ne pas les afficher...

Author: billc.cn, 2016-03-03

2 answers

Selon la documentation du format HProftous les champs de l'objet sont stockés dans le vidage, donc MAT peut connaître la valeur de tous les champs de l'objet.


Fenêtre OQL

Pour OQL toutes les références sont affichées sauf celles qui ont une valeur null.

myWorkspaceMap est null pour l'objet avec 9 attributs


Fenêtre de l'arbre Dominateur Pour moi, MAT affiche tous les attributs de l'objet dans la fenêtre de l'arbre dominator.

Les attributs de la fenêtre

Depuis le l'idée de l'arbre dominateur est d'avoir acyclic graph MAT déterminé que closeController possède un objet URLJarFile et n'affiche pas cet attribut dans la fenêtre principale.

Cela signifie également que s'il y a plusieurs références fortes à l'objet particulier et que le propriétaire de l'objet ne peut pas être identifié, l'objet ne sera pas affiché dans l'arbre dominateur.

Considérez l'attribut name dans le fichier URLJarFile:

Le nom n'est pas affiché dans l'arbre dominator

Si nous choisissons " Objet Liste - > avec les références entrantes " nous pouvons voir, que cette chaîne est référencée à partir de plusieurs objets:

String est référencé à partir de plusieurs objets

 2
Author: Taky, 2016-03-03 12:59:40

Le problème est que la vue que je regardais est uniquement censée lister object refereces, donc null les champs ou les valeurs primitives ne sont pas affichés.

La solution consiste à ajouter la vue "Inspecteur" ou à passer à la perspective dédiée "Analyse de la mémoire", qui affichera les champs réels pour chaque instance sélectionnée, comme le montrent les captures d'écran de @Taky.

 0
Author: billc.cn, 2016-03-03 13:11:11