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, 2020, Oracle and/or its affiliates. All rights reserved.