9.5.1 STATICメンバ統計機能の概要
STATICメンバ統計機能は,インスタンス統計機能と同様に,アプリケーションのメモリリークの調査で使用します。
インスタンス統計機能と異なる点は,インスタンス統計機能が最初に取り出したインスタンスの非staticフィールドから参照しているインスタンスのサイズを再帰的に加算するのに対し,STATICメンバ統計機能は最初に取り出したインスタンスのstaticフィールド(クラスのstaticフィールド)から参照しているインスタンスのサイズを再帰的に加算するという点です。これによって,各クラスのstaticメンバが持つインスタンスの合計サイズを得ることができます。ただし,最初に取り出すインスタンス以外では,インスタンス統計機能およびSTATICメンバ統計機能共に,インスタンスの非staticメンバを基に参照関係を調べます。
インスタンス統計機能とSTATICメンバ統計機能の違いについては,「9.5.2(2) 出力例」を参照してください。
メモリリークの原因を調査する場合は,次のように,メモリリークを調査したいアプリケーションの処理の前後でSTATICメンバ統計機能を実行し,1.と3.のインスタンス数やインスタンスの合計サイズの差分を取り,その増加量を見てメモリリークの原因となっているクラスを特定します。
-
STATICメンバ統計機能を実行します。
-
メモリリークを調査したいアプリケーションの処理を実行します。
-
STATICメンバ統計機能を実行します。
なお,STATICメンバ統計機能は,各クラスのstaticフィールドが参照しているインスタンスのサイズを再帰的に加算するため,各クラスのインスタンスだけのサイズ(参照しているインスタンスのサイズを含まないサイズ)の合計を調べることはできません。
STATICメンバ統計機能では,基点となるオブジェクトから参照関係を調べます。基点となるオブジェクトは,JavaVMが持つすべてのクラスのSTATICメンバが参照し,ほかの参照関係で調べられていないオブジェクトが該当します。
また,参照先のオブジェクトが調査済みの場合は,分岐点まで戻って参照関係を調べます。すべての基点となるオブジェクトがなくなるまで参照関係を調べます。
STATICメンバ統計機能の場合,インスタンス数とインスタンスの合計サイズには,次の内容が出力されます。
-
参照関係にあるすべてのオブジェクトのサイズとオブジェクト数を基点となるオブジェクトに合計します。この値を基点となるオブジェクトが参照しているSTATICメンバを持つクラスに合計して統計値とします。