原文:http://chat-messenger.net/blog-entry-49.html
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にリンクしています。