2016-03-03 2 views
1

Я использую Eclipse Memory Analyzer для просмотра файла HPROF. Он отображает разное количество полей для различных экземпляров одного и того же класса:Ядра JavaRORO кучи не хватает полей?

Кажется поля отсутствует, возможно, никогда не были назначены, но что значение в этих недостающих полей? Являются ли они «нулевым» значением или значением из инициализатора поля?

Edit:

JVM является Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)

Edit 2:

Кажется, отсутствующие поля не "нулевой" (как это было подтверждено через отладку), но, вероятно, никогда не назначены.

Ниже OQL запрос показывает, что Eclipse, анализатор памяти на самом деле знает о реальных значениях в этих областях, а просто решил не показывать их ...

+0

В каких «полях» вы говорите? Здесь я вижу все записи, имеющие по 2 поля: –

+1

@AswinMurugesh. На скриншоте всего два экземпляра. У одного есть 2 поля, а у другого есть 9! –

ответ

2

Согласно HProf format documentation всем полям объект сохраняется в дампе, поэтому MAT может знать значение всего поля объекта.


OQL окно

Для OQL все ссылки приведены, кроме тех, которые имеют нулевое значение.

myWorkspaceMap is null for the object with 9 attributes


окно доминатора дерева Для меня MAT показывает все атрибуты объекта в окне доминатора дерева.

Attributes window

Поскольку idea of the dominator tree должен иметь ациклический граф MAT определено, что closeController собственного URLJarFile объекта и не показывает этот атрибут в главном окне.

Кроме того, это означает, что если имеется несколько сильных ссылок на конкретный объект, и владелец объекта не может быть идентифицирован, объект не будет отображаться в дереве доминантов.

Рассмотрит имя атрибута в URLJarFile:

Name is not shown in the dominator tree

Если мы выбираем «объект List -> с входящими ссылками» мы можем видеть, что эта строка ссылается из нескольких объектов:

String is referenced from several objects

+0

Технически это не имеет ничего общего с функцией доминанта, так как мои скриншоты ясно показывают, что я использую исходящие ссылки вместо входящих. Очевидно, что должно быть возможно детерминистически знать, какие объекты передаются _to_ данным объектом. –

+0

Но ваш скриншот привел меня в правильном направлении. –

+0

Но я предположил, что вы используете дерево доминанта, до вашего EDIT 2. Для OQL я поставил скриншот, который объясняет ваше дело. – Taky

0

Проблема заключается в том, что я рассматривал только список объект рефери, поэтому null поля или примитивные значения не показаны.

Решение состоит в том, чтобы добавить представление «Инспектор» или перейти к выделенной «Анализ памяти», в котором будут отображаться фактические поля для каждого выбранного экземпляра, как показано на снимках @ Taky.

Смежные вопросы