Javaの使用メモリサイズの調査
Windows環境下でJavaアプリが実際に使用しているメモリ量を確認したい時、タスクマネージャーのプロセスタブでは確認できません。タスクマネージャーには、JVMが全体で確保しているメモリのサイズが表示されます。
今回は、2つの方法を使用して、Javaが実際に使用しているメモリのサイズの大まかな値を確認する方法を説明します。本方法を使うことで、アプリの改修無しに、処理にあまり影響を与えず、大まかな使用メモリ量を見ることができます。
1. Jstatを使用する方法
jstatコマンドを使用した使用メモリの計測は別の記事を参照ください。
**Windows環境でもコマンドプロンプトからJstatコマンドを使用することができます。**Windows環境ではJDKのbinフォルダにjstat.exeファイルが存在します。また、jstatコマンドで指定するプロセスIDはタスクマネージャーのPIDと同じ値です。
2. jvisualvmを使用する方法
GUI環境の場合、Java VisualVM (jvisualvm) を使用することで簡易なメモリ使用量の確認が可能です。jvisualvmはJavaアプリケーションに関するデータをすばやく参照できるような形式で図示するツールです。 本ツールを使用したメモリ計測方法を説明します。
jvisualvmのインストール
jstat同様、こちらのツールもOracle JDKに最初から付属しています。JDKのbinフォルダにjvisualvm.exeのファイルが存在します。見つからない場合は、公式サイトからダウンロードします。
jvisualvmでのJVMのメモリの監視
JAVAアプリのヒープメモリの使用量を確認してみます。まずあらかじめjvisualvmを起動しておきます。その後メモリを確認したいアプリケーションを起動してください。アプリを起動すると、左側のjavaアプリの一覧に起動したアプリが表示されますので、それをクリックします。
"監視"のタブをクリックすると、JVMに関する様々なグラフが表示されます。ヒープメモリの確認をする場合は、右上のグラフとなります。わかりやすいグラフ表示で現在の使用済みヒープサイズが確認できます。
詳細な使用メモリの確認
一点注意すべきなのは、上のヒープグラフの"使用済みヒープ"のサイズは、そのタイミングで実際に使われているデータと、もう使われていないがメモリに残っているデータが混在しています。 実際に使用されているヒープのサイズが見たい場合は、その中から実際に使われているデータの量だけを確認する必要があります。
フルGCの発生後のタイミングに注目することで実際の使用メモリを確認できます。詳細はJstatの記事を参照してください。
GC情報の追加
アプリにプラグインを追加することで、GCの状態を確認することが可能です。
[ツール]⇒[プラグイン]でウインドウを開いた上で、[使用可能なプラグイン]タグを選択します。
いくつかのプラグインの中から、"Visual GC" のプラグインを追加してください。追加が成功すると、新しく"Visual GC"というタブが追加されます。このタブを選択することで、GCの状況をグラフで確認することも可能です。
jvisualvmを使用する上での注意
jvisualvmはJVMに関する色々なデータをすばやく図形で表示することに特化しています。そのため、**グラフの表示範囲の指定や、数値の出力が出来ず、詳細の調査をするには向いていません。**今動いているアプリのリアルタイムの情報を手軽に確認したい場合はjvisualvmを使用。もう少し詳細に調査したい場合は、jstatを使用した方法を使うなどの使い分けをすると良いと思います。