Java VisualVM - ヒープダンプの参照

Java VisualVM を使えば、ヒープダンプファイルの内容を参照し、ヒープ内の割り当て済みオブジェクトをすばやく確認できます。ヒープダンプは、メインウィンドウのヒープダンプサブタブ内に表示されます。ローカルシステム上に保存されたバイナリ形式のヒープダンプファイル (.hprof) を開くことができます。また、Java VisualVM を使って実行中のアプリケーションのヒープダンプを取ることもできます。

ヒープダンプとは、ある特定の時間に Java Virtual Machine (JVM) ヒープ内に含まれていたすべてのオブジェクトのスナップショットのことです。JVM ソフトウェアは、すべてのクラスインスタンスと配列用のオブジェクトのメモリーを、ヒープから割り当てます。ガベージコレクタは、あるオブジェクトが不要となり、かつそのオブジェクトへの参照が 1 つも存在しない場合に、そのヒープメモリーを回収します。ヒープを調べれば、オブジェクトが作成された場所を特定し、それらのオブジェクトへの参照をソース内で見つけることができます。JVM ソフトウェアが不要オブジェクトのヒープからの削除に失敗している場合、Java VisualVM を使えば、そのオブジェクトのもっとも近いガベージコレクションルートを特定できます。

ヒープダンプファイルのオープン

ローカルシステム上に保存されたヒープダンプファイルが存在している場合にそのファイルを Java VisualVM で開くには、メインメニューから「File」 > 「Load」を選択します。Java VisualVM は、.hprof ファイル形式で保存されたヒープダンプを開くことができます。保存されたヒープダンプを開くと、そのヒープダンプがメインウィンドウ内のタブとして開かれます。

ヒープダンプの取得

Java VisualVM を使えば、実行中のローカルアプリケーションのヒープダンプを取ることができます。Java VisualVM を使ってヒープダンプを取っても、そのファイルを明示的に保存しないかぎり、そのファイルは一時的なものでしかありません。ファイルを保存しなかった場合、アプリケーション終了時にそのファイルは削除されます。

ヒープダンプを取るには次のいずれかを行います。

ローカルアプリケーションのヒープダンプは、そのアプリケーションのタブのサブタブとして開かれます。また、ヒープダンプは「Applications」ウィンドウのアプリケーションノードの下にも、タイムスタンプ付きのヒープダンプノードとして表示されます。ヒープダンプをローカルシステムに保存するには、そのヒープダンプを「Applications」ウィンドウで右クリックし、「Save As」を選択します。

ヒープダンプの参照

Java VisualVM では、次の各ビュー内でヒープダンプを視覚的に参照できます。

「Summary」ビュー

Java VisualVM でヒープダンプを開くと、デフォルトで「Summary」ビューが表示されます。「Summary」ビューには、ヒープダンプが取られた実行環境とその他のシステムプロパティーが表示されます。

ヒープダンプの「Summary」ビューのスクリーンショット

「Classes」ビュー

「Classes」ビューには、クラスの一覧と、各クラスによって参照されるインスタンスの数とパーセントが表示されます。特定クラスのインスタンスを一覧表示するには、その名前を右クリックし、「Show in Instances View」を選択します。

結果のソート方法を変更するには、列の見出しをクリックします。一覧の下にあるフィルタを使って名前によるクラスのフィルタリングを行うこともできますし、あるクラス名を右クリックして「Show Only Subclasses」を選択することで、表示される結果をそのクラスのサブクラスに制限することもできます。

ヒープダンプの「Classes」ビューのスクリーンショット

「Instances」ビュー

「Instances」ビューには、選択されたクラスのオブジェクトインスタンスが表示されます。「Instances」ペインからあるインスタンスを選択すると、そのクラスのフィールドとそのクラスへの参照が、それぞれ対応するペイン内に表示されます。「References」ペインである項目を右クリックして「Show Nearest GC Root」を選択すれば、もっとも近いガベージコレクションルートオブジェクトを表示できます。

ヒープダンプの「Instances」ビューのスクリーンショット

Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.