【Java】PCリソース情報(ディスク容量、JVMメモリ容量、CPU情報)を取得する

■ PCリソース情報

【1】 ディスク容量
【2】 JVMメモリ容量
【3】 CPU情報

【1】 ディスク容量

 * Windowsの場合「new File("C:/")」、Linuxの場合「new File("/")」を指定し、
    getTotalSpace() / getFreeSpace() で取得できる
サンプル
import java.io.File;

public class Main {

  public static void main(String[] args) {
    // !Point! "C:/"を指定 (Linux の場合 "/" を指定)
    File file = new File("C:/");

    long total = file.getTotalSpace();
    long free = file.getFreeSpace();
    long used = total - free;
    double usedSpacePercentage = ((double) used / (double) total) * 100.0;

    System.out.println(String.format("Total:%s, Used:%s, Free:%s, Ratio:%s", total, used, free, usedSpacePercentage));
  }
}

参考文献

http://d.hatena.ne.jp/kiri-mochi/20101108/1289164507

【2】 JVMメモリ容量

Java1.5以上

 * MemoryMXBeanクラス を使う
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/management/MemoryMXBean.html
サンプル
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;

public class MomoryDemo {

  public static void main(String[] args) {
    MemoryMXBean mbean = ManagementFactory.getMemoryMXBean();

    MemoryUsage heapUsage = mbean.getHeapMemoryUsage();
    long init = heapUsage.getInit();
    long used = heapUsage.getUsed();
    long committed = heapUsage.getCommitted();
    long max = heapUsage.getMax();
    System.out.println(String.format("init = %s, used = %s, committed = %s, max = %s.", init, used, committed, max));

    MemoryUsage nonHeapUsage = mbean.getNonHeapMemoryUsage();
    long initForNonHeap = nonHeapUsage.getInit();
    long usedForNonHeap = nonHeapUsage.getUsed();
    long committedForNonHeap = nonHeapUsage.getCommitted();
    long maxForNonHeap = nonHeapUsage.getMax();
    System.out.println(String.format("init = %s, used = %s, committed = %s, max = %s.", initForNonHeap, usedForNonHeap,
        committedForNonHeap, maxForNonHeap));
  }
}
出力結果
init = 134217728, used = 2044880, committed = 128974848, max = 1888485376.
init = 2555904, used = 5301288, committed = 8060928, max = -1.
[[https://docs.oracle.com/javase/jp/8/docs/api/java/lang/management/MemoryUsage.html#getMax--]]
より抜粋

public long getMax()
メモリー管理に使用できる最大メモリー量(バイト単位)を返します。
最大メモリー・サイズが未定義の場合、このメソッドは-1を返します。
参考文献
http://itpro.nikkeibp.co.jp/article/COLUMN/20060605/239936/?rt=nocnt

Java1.5未満

 * Runtime.getRuntime().totalMemory() / freeMemory() / freeMemory() で取得できる
サンプル
public class Main {
  public static void main(String[] args) {
    Runtime runtime = Runtime.getRuntime();
    long total = runtime.totalMemory();
    long free = runtime.freeMemory();
    long used = total - free;
    long max = runtime.maxMemory();

    System.out.println(String.format("Total:%s, Used:%s, Free:%s, Max:%s", total, used, free, max));
  }
}
参考文献
http://www.task-notes.com/entry/20151009/1444369222

【3】 CPU情報

 * 長くなったので、以下の関連記事に転記
https://blogs.yahoo.co.jp/dk521123/37259808.html

関連記事

Java から PC の CPU情報を取得する方法を考える

https://blogs.yahoo.co.jp/dk521123/37259808.html

JavaJVMのメモリ情報を出力させる

https://blogs.yahoo.co.jp/dk521123/33278121.html

Java】 スレッドダンプ / リソース監視・確認コマンド

https://blogs.yahoo.co.jp/dk521123/36741691.html

Java】OS (Windows - Linux)依存しないようにするには...

https://blogs.yahoo.co.jp/dk521123/33906128.html