特定の Java プログラムを実行しています。そのプログラムは-Xmx
よりも高く-Xms
、つまりヒープが大きくなる可能性があります。実行終了時のヒープ サイズは (IIRC) であり、実行中に使用される最大値ではありません。
- 現在のヒープサイズを取得するにはどうすればよいですか?
- 現在のサイズ「自分」を定期的にポーリングする以外に、実行中に最大ヒープサイズを取得するにはどうすればよいですか?
特定の Java プログラムを実行しています。そのプログラムは-Xmx
よりも高く-Xms
、つまりヒープが大きくなる可能性があります。実行終了時のヒープ サイズは (IIRC) であり、実行中に使用される最大値ではありません。
現在のヒープ サイズを取得します。
public static long getHeapSize(){
int mb = 1024*1024;
//Getting the runtime reference from system
Runtime runtime = Runtime.getRuntime();
return ((runtime.totalMemory() - runtime.freeMemory()) / mb);
}
プログラム自体から検査する場合は、Runtimeクラスのメソッドを使用します。
Runtime.getRuntime().freeMemory()
Runtime.getRuntime().maxMemory()
プログラムの外部からヒープ サイズを調べても問題ない場合は、JVisualVM を使用する必要があります。これは、JDK の bin フォルダーにあります。それを起動し、Java プログラムにアタッチするだけで、プログラムのヒープ使用状況を把握できます。ヒープ使用量のグラフが表示されるため、プログラムの実行の最大ヒープ サイズを簡単に見つけることができます。
// ヒープの現在のサイズをバイト単位で取得します
long heapSize = Runtime.getRuntime().totalMemory();
// ヒープの最大サイズをバイト単位で取得します。ヒープはこのサイズを超えて拡大することはできません。// どんな試みも OutOfMemoryException を引き起こします。
long heapMaxSize = Runtime.getRuntime().maxMemory();
// ヒープ内の空きメモリ量をバイト単位で取得します。// このサイズはガベージ コレクション後に増加し、新しいオブジェクトが作成されると減少します。
long heapFreeSize = Runtime.getRuntime().freeMemory();
ランタイム情報を参照してください:
Runtime.getRuntime().maxMemory();
Runtime.getRuntime().totalMemory();
Runtime.getRuntime().freeMemory();