6

特定の Java プログラムを実行しています。そのプログラムは-Xmxよりも高く-Xms、つまりヒープが大きくなる可能性があります。実行終了時のヒープ サイズは (IIRC) であり、実行中に使用される最大値ではありません。

  • 現在のヒープサイズを取得するにはどうすればよいですか?
  • 現在のサイズ「自分」を定期的にポーリングする以外に、実行中に最大ヒープサイズを取得するにはどうすればよいですか?
4

6 に答える 6

4

現在のヒープ サイズを取得します。

public static long getHeapSize(){
    int mb = 1024*1024;

    //Getting the runtime reference from system
    Runtime runtime = Runtime.getRuntime();

    return ((runtime.totalMemory() - runtime.freeMemory()) / mb);
}
于 2013-02-18T13:26:55.467 に答える
2

プログラム自体から検査する場合は、Runtimeクラスのメソッドを使用します。

Runtime.getRuntime().freeMemory()
Runtime.getRuntime().maxMemory()

プログラムの外部からヒープ サイズを調べても問題ない場合は、JVisualVM を使用する必要があります。これは、JDK の bin フォルダーにあります。それを起動し、Java プログラムにアタッチするだけで、プログラムのヒープ使用状況を把握できます。ヒープ使用量のグラフが表示されるため、プログラムの実行の最大ヒープ サイズを簡単に見つけることができます。

于 2013-02-18T13:26:40.677 に答える
2

// ヒープの現在のサイズをバイト単位で取得します

long heapSize = Runtime.getRuntime().totalMemory(); 

// ヒープの最大サイズをバイト単位で取得します。ヒープはこのサイズを超えて拡大することはできません。// どんな試みも OutOfMemoryException を引き起こします。

long heapMaxSize = Runtime.getRuntime().maxMemory();

// ヒープ内の空きメモリ量をバイト単位で取得します。// このサイズはガベージ コレクション後に増加し、新しいオブジェクトが作成されると減少します。

long heapFreeSize = Runtime.getRuntime().freeMemory(); 
于 2013-02-18T13:26:51.193 に答える
1

ランタイム情報を参照してください:

Runtime.getRuntime().maxMemory();
Runtime.getRuntime().totalMemory();
Runtime.getRuntime().freeMemory();
于 2013-02-18T13:27:50.663 に答える