这里给出一个通常的Java代码示例如下:
public class GetJvmInfo {
public static void main(String[] args) {
MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
MemoryUsage usage = memoryMXBean.getHeapMemoryUsage();
System.out.println("INT HEAP:" + usage.getInit()/1024/1024 + "Mb");
System.out.println("MAX HEAP:" + usage.getMax()/1024/1024 + "Mb");
System.out.println("USED HEAP:" + usage.getUsed()/1024/1024 + "Mb");
System.out.println("\nFull Information:");
System.out.println("Heap Memory Usage:" + memoryMXBean.getHeapMemoryUsage());
System.out.println("Non-Heap Memory Usage:" + memoryMXBean.getNonHeapMemoryUsage());
List<String> inputArguments = ManagementFactory.getRuntimeMXBean().getInputArguments();
System.out.println("=====================java options==================");
System.out.println(inputArguments);
System.out.println("=====================通过java来获取相关系统状态====================");
long i = Runtime.getRuntime().totalMemory()/1024/1024;//Java 虚拟机中的内存总量,以字节为单位
System.out.println("总的内存量为:" + i + "Mb");
long j = Runtime.getRuntime().freeMemory()/1024/1024;//Java 虚拟机中的空闲内存量
System.out.println("空闲内存量:" + j + "Mb");
long k = Runtime.getRuntime().maxMemory()/1024/1024;
System.out.println("最大可用内存量:" + k + "Mb");
}
}
输出效果如下:
INT HEAP:192Mb
MAX HEAP:2713Mb
USED HEAP:2Mb
Full Information:
HeapMemory Usage:init = 201326592(196608K) used =3020112(2949K) committed = 192937984(188416K) max = 2844786688(2778112K)
Non-HeapMemory Usage:init = 2555904(2496K) used = 4103240(4007K)committed = 8060928(7872K) max = -1(-1K)
=====================java options==================
[-Dfile.encoding=UTF-8]
=====================通过java来获取相关系统状态====================
总的内存量为:184Mb
空闲内存量:181Mb
最大可用内存量:2713Mb
分析:可以看到初始申请分配的堆大小为192M,但是最大的堆可以达到2713Mb(之所以,最大的堆大小可以大于初始申请分配的堆的大小,是因为没有设置该进程中最大的堆分配大小,可以允许动态增加到此时内存允许最大的堆大小)。很明显已用的堆大小为2Mb。
可以看到:Heap Memory Usage:中的信息是和我们前面分别计算出来的值是一致的。因此,如果只是显示的话,可以直接使用:
System.out.println("\nFull Information:");
System.out.println("Heap Memory Usage:" + memoryMXBean.getHeapMemoryUsage());
System.out.println("Non-Heap Memory Usage:" + memoryMXBean.getNonHeapMemoryUsage());
既可以看到堆的使用情况,又可以非堆的使用情况。
另外,这个命令也是不错的:
ManagementFactory.getRuntimeMXBean().getInputArguments()
可以看到你对JVM的设置情况。
当然,还可以通过Runtime中的相关参数来查看。