Java 代码中如何获取JVM相关的信息?

来源:互联网 发布:java方法中布尔型变量 编辑:程序博客网 时间:2024/06/05 05:41

这里给出一个通常的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中的相关参数来查看。


原创粉丝点击