目次
Java メモリー使用量を取得 Runtime.getRuntime().totalMemory、freeMemory
Java 仮想マシンのメモリ情報について、「合計」、「使用量」、「使用可能最大」の情報を返します。
各項目の説明は以下となります。
- 合計・・・Runtime.getRuntime().totalMemory()で、Java仮想マシンへのメモリ割り当て量になります。
- 使用量・・・Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()になり、
現在メモリに割り当てられたオブジェクトのメモリ使用量です。 - 使用可能最大・・・Runtime.getRuntime().maxMemory()で、Java仮想マシンが使用を試みる最大メモリ容量になります。
使用量が合計に近づき、かつガベージコレクションでも空きメモリが確保できない場合、Java仮想マシンは「使用可能最大」まで拡張します。
サンプルプログラム
/** * Java 仮想マシンのメモリ総容量、使用量、 * 使用を試みる最大メモリ容量の情報を返します。 * @return Java 仮想マシンのメモリ情報 */ public static String getMemoryInfo() { DecimalFormat f1 = new DecimalFormat("#,###KB"); DecimalFormat f2 = new DecimalFormat("##.#"); long free = Runtime.getRuntime().freeMemory() / 1024; long total = Runtime.getRuntime().totalMemory() / 1024; long max = Runtime.getRuntime().maxMemory() / 1024; long used = total - free; double ratio = (used * 100 / (double)total); String info = "Java メモリ情報 : 合計=" + f1.format(total) + "、" + "使用量=" + f1.format(used) + " (" + f2.format(ratio) + "%)、" + "使用可能最大="+f1.format(max); return info; }
実行結果1
◆実行例
public static void main(String[] args) { System.out.println(getMemoryInfo()); }
◆出力結果
Java メモリ情報 : 合計=1,984KB、使用量=458KB (23.1%)、使用可能最大=65,088KB
実行結果2
◆実行例
Javaヒープサイズを変更して実行してみる。
Javaヒープサイズの値はJavaコマンドのオプションで指定することができます。
java -Xms64m -Xmx512m Main
-Xms初期ヒープサイズ
Java仮想マシンへの初期メモリ割り当て量を指定します。デフォルトは2MBです。
-Xmx最大ヒープサイズ
Java仮想マシンへの最大メモリ割り当て量を指定します。デフォルトは64MBです。
public static void main(String[] args) { System.out.println(getMemoryInfo()); }
◆出力結果
Java メモリ情報 : 合計=65,088KB、使用量=524KB (0.8%)、使用可能最大=520,256KB
「合計 Runtime.getRuntime().totalMemory()」が-Xmsに、「使用可能最大 Runtime.getRuntime().maxMemory()」が-Xmxにリンクしています。