博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 代码中如何获取JVM相关的信息?
阅读量:4220 次
发布时间:2019-05-26

本文共 2396 字,大约阅读时间需要 7 分钟。

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

转载地址:http://oqomi.baihongyu.com/

你可能感兴趣的文章
python笔记(一)获取当前目录路径和文件
查看>>
Python内存管理及释放
查看>>
如何手动释放Python的内存
查看>>
一个人没有出息的九大表现,现在知道还不算晚
查看>>
各种池---内存池的高效实现(C语言)
查看>>
将C语言宏定义转换成字符串!
查看>>
动态调度
查看>>
初创企业在发展过程中经常会陷入这些专利误区,你有没有中招?
查看>>
手把手教你写专利申请书/如何申请专利
查看>>
【图结构专题】有向图
查看>>
徐家骏是华为数据中心的头,技术超级牛人,一级部门总监,华为副总裁,年收入过千万。
查看>>
徐家骏
查看>>
Linux操作系统-文件(2)
查看>>
浅谈linux的命令行解析参数之getopt_long函数
查看>>
Makefile 入门
查看>>
Linux在shell下输出进度条
查看>>
图基本算法 图的表示方法 邻接矩阵 邻接表
查看>>
Linux下c语言多线程编程
查看>>
全套CRC校验
查看>>
Keil的代码优化产生的问题
查看>>