Runtimeクラスを使用してJava仮想マシンのメモリ情報と、使用可能なプロセッサ(コア)数を取得する方法です。使うことはほとんど無いかもしれません。
使用可能なプロセッサ(コア)数の取得方法
Java仮想マシンが使用できるプロセッサ(コア)の数を得るにはRuntime#availableProcessors
を使用します。
用途としては JavaDoc に「利用可能なプロセッサ数に影響を受けるアプリケーションは、このプロパティをときどきポーリングして、リソース使用法を調整する必要があります」と書かれているとおり、マルチスレッドの処理でスレッド数を調整するのに使ってるのを見たことがあるくらいですね。
public class RuntimeCoreTest { public static void main(String[] args) { System.out.println("CPU: " + Runtime.getRuntime().availableProcessors()); } }
実行結果は以下の通りです。
$ java RuntimeCoreTest CPU: 16
メモリ使用量の取得方法
Java仮想マシンのメモリ情報は以下の通り取得することが可能です。
Runtime#totalMemory
Java仮想マシンのメモリーの総容量Runtime#freeMemory
Java仮想マシン内の空きメモリーの容量Runtime#maxMemory
Java仮想マシンが使用を試みる最大メモリ容量
public class RuntimeMemoryTest { public static void main(String[] args) { long total = Runtime.getRuntime().totalMemory(); long free = Runtime.getRuntime().freeMemory(); long used = total - free; long max = Runtime.getRuntime().maxMemory(); System.out.println("total => " + total / 1024 + "KB"); System.out.println("free => " + free / 1024 + "KB"); System.out.println("used => " + (total - free) / 1024 + "KB"); System.out.println("max => " + max / 1024 + "KB"); } }
実行結果は以下の通りとなります。used
は総容量から空き容量を引いて使用している容量を出しているだけです。
$ java RuntimeMemoryTest total => 741888KB free => 734146KB used => 7741KB max => 10982912KB
totalMemory
とmaxMemory
の違いが分かりずらいと思いますが、totalMemory
は現在、Java仮想マシンに割り当てられているメモリの総容量であり、-Xms
で割り当てるヒープサイズと一致し、maxMemory
はJava仮想マシンが使用を試みる(割り当てを行う)最大のメモリ容量であり、-Xmx
で割り当てるヒープサイズと一致します。freeMemory
は現在、割り当てられているメモリtotalMemory
における空き容量となります。
$ java -Xms10m -Xmx512m RuntimeMemoryTest total => 9728KB free => 9253KB used => 474KB max => 466432KB