MENU

Java メモリー使用量を取得

目次

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にリンクしています。

  • URLをコピーしました!
目次