javaSE_获取java虚拟机信息

本文详细介绍了如何在Java程序中获取Java虚拟机(JVM)的运行时信息,包括内存使用、堆内存、非堆内存、运行时详细信息、操作系统信息、线程状态、编译信息、内存池和垃圾收集器的状态等。通过示例代码展示了如何利用Runtime类和ManagementFactory类来监控JVM的性能指标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  获取java虚拟机信息

程序是在java虚拟机中运行的,动态获取虚拟机中的运行时环境:

如:

//Java 虚拟机中的内存总量,以字节为单位  

int total = (int)Runtime.getRuntime().totalMemory()/1024/1024;

System.out.println("内存总量 :" + total + "mb");  

int free = (int)Runtime.getRuntime().freeMemory()/1024/1024;

System.out.println("空闲内存量 : " + free + "mb");  

int max = (int) (Runtime.getRuntime().maxMemory() /1024 / 1024);

System.out.println("最大内存量 : "  + max + "mb");  

输出:

内存总量 120mb

空闲内存量 118mb

最大内存量 1790mb

 

其他信息,如:

public static void main(String[] args) {

//==========================Memory=========================

System.out.println("==========================Memory=======================");

MemoryMXBean memoryMBean = ManagementFactory.getMemoryMXBean();   

    MemoryUsage usage = memoryMBean.getHeapMemoryUsage();   

    System.out.println("初始化 Heap: " + (usage.getInit()/1024/1024) + "mb");   

    System.out.println("最大Heap: " + (usage.getMax()/1024/1024) + "mb");   

    System.out.println("已经使用Heap: " + (usage.getUsed()/1024/1024) + "mb");   

    System.out.println("Heap Memory Usage: " + memoryMBean.getHeapMemoryUsage());   

    System.out.println("Non-Heap Memory Usage: " + memoryMBean.getNonHeapMemoryUsage());   

    //==========================Runtime=========================

    System.out.println("==========================Runtime=======================");

    RuntimeMXBean runtimeMBean = ManagementFactory.getRuntimeMXBean();

System.out.println("JVM name : " + runtimeMBean.getVmName());

System.out.println("lib path : " + runtimeMBean.getLibraryPath());

System.out.println("class path : " + runtimeMBean.getClassPath());

System.out.println("getVmVersion() " + runtimeMBean.getVmVersion());  

//java options

List<String> argList = runtimeMBean.getInputArguments();

for(String arg : argList){

System.out.println("arg : " + arg);

}

//==========================OperatingSystem=========================

System.out.println("===================OperatingSystem====================");

OperatingSystemMXBean osMBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();  

//获取操作系统相关信息  

System.out.println("getName() "+ osMBean.getName());

System.out.println("getVersion() " + osMBean.getVersion());

System.out.println("getArch() "+osMBean.getArch());  

    System.out.println("getAvailableProcessors() " + osMBean.getAvailableProcessors());  

    //==========================Thread=========================

    System.out.println("==========================Thread=========================");

    //获取各个线程的各种状态,CPU 占用情况,以及整个系统中的线程状况  

    ThreadMXBean threadMBean=(ThreadMXBean)ManagementFactory.getThreadMXBean();  

    System.out.println("getThreadCount() " + threadMBean.getThreadCount());  

    System.out.println("getPeakThreadCount() " + threadMBean.getPeakThreadCount());  

    System.out.println("getCurrentThreadCpuTime() " + threadMBean.getCurrentThreadCpuTime());  

    System.out.println("getDaemonThreadCount() " + threadMBean.getDaemonThreadCount());  

    System.out.println("getCurrentThreadUserTime() "+ threadMBean.getCurrentThreadUserTime());  

    //==========================Compilation=========================

    System.out.println("========================Compilation======================");

    CompilationMXBean compilMBean=(CompilationMXBean)ManagementFactory.getCompilationMXBean();   

    System.out.println("getName() " + compilMBean.getName());  

    System.out.println("getTotalCompilationTime() " + compilMBean.getTotalCompilationTime());  

    //==========================MemoryPool=========================

    System.out.println("=======================MemoryPool========================");

    //获取多个内存池的使用情况  

    List<MemoryPoolMXBean> mpMBeanList= ManagementFactory.getMemoryPoolMXBeans();  

    for(MemoryPoolMXBean mpMBean : mpMBeanList){  

        System.out.println("getUsage() " + mpMBean.getUsage());  

        System.out.println("getMemoryManagerNames() "+ mpMBean.getMemoryManagerNames().toString());  

    }

    //==========================GarbageCollector=========================

    System.out.println("====================GarbageCollector=====================");

    //获取GC的次数以及花费时间之类的信息  

    List<GarbageCollectorMXBean> gcMBeanList=ManagementFactory.getGarbageCollectorMXBeans();  

    for(GarbageCollectorMXBean gcMBean : gcMBeanList){  

        System.out.println("getName() " + gcMBean.getName());  

        System.out.println("getMemoryPoolNames() "+ gcMBean.getMemoryPoolNames());  

    }

    //==========================Other=========================

    System.out.println("========================Other=======================");

    //Java 虚拟机中的内存总量,以字节为单位  

    int total = (int)Runtime.getRuntime().totalMemory()/1024/1024;

    System.out.println("内存总量 :" + total + "mb");  

    int free = (int)Runtime.getRuntime().freeMemory()/1024/1024;

    System.out.println("空闲内存量 : " + free + "mb");  

    int max = (int) (Runtime.getRuntime().maxMemory() /1024 / 1024);

    System.out.println("最大内存量 : "  + max + "mb");  

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值