MemoryMXBeanを利用してJava仮想マシンのメモリ使用量を取得するサンプルコードです。Java仮想マシンのメモリ領域はヒープ領域と、ヒープ以外の領域に分かれています。MemoryMXBeanはそれら個別のメモリ領域の使用量を取得するためのメソッドを提供しています。
メモリの使用量を取得するためには、まずgetHeapMemoryUsage()、getNonHeapMemoryUsage()を使用して、それぞれの領域の使用量を保持するMemoryUsageクラスのオブジェクトを取得します。そして、MemoryUsageクラスのオブジェクトからメモリの使用量を取得します。
MemoryUsageクラスを介して取得できるメモリの使用量は「VMが起動時にOSに要求するメモリ容量」、「現在の使用量」、「使用できる状態になっているメモリ空間の容量」と「VMが利用できるメモリ容量の最大値」の4つの値です。「使用できる状態になっているメモリ空間の容量」はOSが既にこのプロセスにメモリの割り当てを行った領域の量で、必ず、「現在の使用量」よりも大きい値になります。逆に「現在の使用量」が「VMが利用できるメモリ容量の最大値」以下であっても、OSのメモリ領域が少ない場合は、割り当てに失敗する場合もあります。
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;
public class GetUsedMemory {
public static void main(String[] args) {
MemoryMXBean mbean = ManagementFactory.getMemoryMXBean();
MemoryUsage heap = mbean.getHeapMemoryUsage();
System.out.println("heap init:" + heap.getInit());
System.out.println("heap used:" + heap.getUsed());
System.out.println("heap committed:" + heap.getCommitted());
System.out.println("heap max:" + heap.getMax());
System.out.println(heap);
MemoryUsage nonHeap = mbean.getNonHeapMemoryUsage();
System.out.println("nonHeap init:" + nonHeap.getInit());
System.out.println("nonHeap used:" + nonHeap.getUsed());
System.out.println("nonHeap committed:" + nonHeap.getCommitted());
System.out.println("nonHeap max:" + nonHeap.getMax());
System.out.println(nonHeap);
}
}
ちょっと一休み. Javaキーワード並び替えゲーム
画面に表示される文字列を並び替えるとJavaに関連するキーワードになります。ヒントをたよりに並び替えを行ってエンターを押してください。
ユーザ登録をしてログインするとランキングに参加できます。