1

Eclipse Memory Analyzer を使用して HPROF ファイルを表示しています。同じクラスのインスタンスごとに異なる数のフィールドが表示されます。

欠落しているフィールドは割り当てられていないようですが、それらの欠落しているフィールドの値は何でしたか? それらは「ゼロ」値ですか、それともフィールド初期化子からの値ですか?

編集:

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

編集2:

欠落しているフィールドは「ゼロ」ではないようですが (デバッグで確認)、おそらく割り当てられていません。

以下の OQL クエリは、Eclipse メモリ アナライザーがこれらのフィールドの実際の値を実際に認識しているが、それらを表示しないことを選択したことを示しています...

4

2 に答える 2

2

HProf 形式のドキュメントによると、オブジェクトのすべてのフィールドがダンプに格納されるため、MATはオブジェクトのすべてのフィールドの値を知ることができます。


OQL ウィンドウ

OQL の場合、null 値を持つものを除くすべての参照が表示されます。

myWorkspaceMap は、9 つ​​の属性を持つオブジェクトに対して null です


ドミネーター ツリー ウィンドウ 私にとっての MAT は、ドミネーター ツリー ウィンドウにオブジェクトのすべての属性を表示します。

属性ウィンドウ

ドミネーター ツリーの考え方は非巡回グラフを持つことであるため、MAT は closeController が URLJarFile オブジェクトを所有していると判断し、メイン ウィンドウにこの属性を表示しません。

また、特定のオブジェクトへの複数の強い参照があり、オブジェクトの所有者を識別できない場合、オブジェクトはドミネーター ツリーに表示されないことを意味します。

URLJarFile の name 属性を考えてみましょう。

名前がドミネーター ツリーに表示されない

「リスト オブジェクト -> 着信参照あり」を選択すると、この文字列が複数のオブジェクトから参照されていることがわかります。

文字列が複数のオブジェクトから参照されています

于 2016-03-03T12:06:16.240 に答える
0

問題は、私が見ていたビューがオブジェクト参照のみをリストすることになっているため、nullフィールドまたはプリミティブ値が表示されないことです。

解決策は、「インスペクタ」ビューを追加するか、専用の「メモリ分析」パースペクティブに切り替えることです。これにより、@Taky のスクリーンショットに示されているように、選択された各インスタンスの実際のフィールドが表示されます。

于 2016-03-03T13:11:11.230 に答える