8.4.1 インスタンス統計機能の概要

インスタンス統計機能では,classAのインスタンス→classAのメンバ変数(クラスはclassB)→classBのインスタンス→...とインスタンスの参照関係を調べ,ほかのインスタンスへの参照を持たないインスタンスのサイズをそのインスタンスをメンバに持つクラスに再帰的に加算します。つまり,インスタンス統計機能とは,各クラスのインスタンスがメンバとして持つインスタンスの合計サイズが出力される機能です。

インスタンス統計機能では,明示管理ヒープ機能を使用している場合に,Explicitヒープのインスタンスを統計対象とするかどうかによって,クラス別統計情報の出力結果が変わります。なお,Explicitヒープのインスタンスを統計対象とする場合には,jheapprofコマンドに-explicitオプションを指定して実行します。

統計対象ごとの出力結果について,次の図に示すインスタンス構造を例に説明します。

図8-1 インスタンス構造の例

[図データ]

Explicitヒープを統計対象に含む場合は,インスタンスa1,b1,b2,c1,およびc2がクラス別統計情報の対象となります。Explicitヒープを統計対象に含まない場合は,インスタンスa1,b2,c2がクラス別統計情報の対象となります。

統計対象ごとのインスタンス数とインスタンスの合計サイズを次の表に示します。

表8-5 統計対象ごとのインスタンス数とインスタンスの合計サイズ

jheapprofコマンドの引数統計対象クラスAクラスBクラスC
インスタンス数合計サイズインスタンス数合計サイズインスタンス数合計サイズ
-explicit
  • Javaヒープ
  • Permanent領域
  • Explicitヒープ
112222222
-noexplicit
  • Javaヒープ
  • Permanent領域
111111111

注※ 合計サイズは,インスタンスの合計サイズを示します。単位はバイトです。


各クラスのインスタンスの合計サイズの算出式を次に示します。

インスタンス統計機能では,基点となるオブジェクトから次の順序に従って参照されるオブジェクトの参照関係を調べます。基点となるオブジェクトは,ほかの参照関係で調べられていないオブジェクトが該当します。1.,2.,3.は調査の優先順を示します。

  1. Javaヒープ内のアドレスの低い順
  2. 明示管理ヒープ内のアドレスの低い順
  3. Permanentヒープ内のアドレスの低い順

参照先のオブジェクトが調査済みの場合は,分岐点まで戻って参照関係を調べます。

また,参照先のオブジェクトがほかの参照関係の基点となるオブジェクトである場合は,参照先オブジェクトとして扱います。すべての基点となるオブジェクトがなくなるまで参照関係を調べます。

インスタンス統計機能の場合,インスタンス数には各クラスのインスタンス数が出力されます。インスタンスの合計サイズには,次の内容が出力されます。