获得 Java 虚拟机 (JVM) 信息

来源:互联网 发布:科发源雍禾碧莲盛 知乎 编辑:程序博客网 时间:2024/05/19 13:16

软件包 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。
它同时允许从本地和远程对正在运行的 Java 虚拟机进行监视和管理。


管理接口
ClassLoadingMXBean  Java 虚拟机的类加载系统。
CompilationMXBean  Java 虚拟机的编译系统。
MemoryMXBean  Java 虚拟机的内存系统。
ThreadMXBean  Java 虚拟机的线程系统。
RuntimeMXBean  Java 虚拟机的运行时系统。
OperatingSystemMXBean  Java 虚拟机在其上运行的操作系统。
GarbageCollectorMXBean  Java 虚拟机中的垃圾回收器。
MemoryManagerMXBean  Java 虚拟机中的内存管理器。
MemoryPoolMXBean  Java 虚拟机中的内存池。

示例如下:
import java.lang.management.ClassLoadingMXBean;
import java.lang.management.CompilationMXBean;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.ThreadMXBean;
import java.lang.management.RuntimeMXBean;
import java.lang.management.OperatingSystemMXBean;
import java.lang.management.MemoryPoolMXBean;
import java.util.List;

public class JVM {
   
    public static void main(String[] args) {
        //Java 虚拟机线程系统的管理接口 ThreadMXBean
        ThreadMXBean th=(ThreadMXBean)ManagementFactory.getThreadMXBean() ;
        System.out.println("活动线程的当前数目"+th.getThreadCount());
        System.out.println("返回活动守护线程的当前数目"+th.getDaemonThreadCount());
        System.out.println("Java 虚拟机启动或峰值重置以来峰值活动线程计数"+th.getPeakThreadCount());
        System.out.println("返回当前线程的总 CPU 时间"+th.getCurrentThreadUserTime());
        System.out.println("当前线程在用户模式中执行的 CPU 时间"+th.getCurrentThreadUserTime());
       
        //Java 虚拟机的运行时系统的管理接口。 RuntimeMXBean
        RuntimeMXBean run=(RuntimeMXBean)ManagementFactory.getRuntimeMXBean();
        System.out.println("正在运行的 Java 虚拟机的名称"+run.getName());
        System.out.println("Java 虚拟机规范名称"+run.getSpecName());
        System.out.println("返回 Java 库路径"+run.getLibraryPath());
        System.out.println("系统类加载器用于搜索类文件的 Java 类路径"+run.getClassPath());
       
        //用于操作系统的管理接口,Java 虚拟机在此操作系统上运行 OperatingSystemMXBean
        OperatingSystemMXBean op=(OperatingSystemMXBean)ManagementFactory.getOperatingSystemMXBean();
        System.out.println("返回操作系统的架构"+op.getArch());
        System.out.println("返回操作系统名称"+op.getName());
        System.out.println("返回操作系统的版本"+op.getVersion());
        System.out.println("Java 虚拟机可以使用的处理器数目"+op.getAvailableProcessors());
   
        //内存池的管理接口。内存池表示由 Java 虚拟机管理的内存资源,
        //由一个或多个内存管理器对内存池进行管理 MemoryPoolMXBean
         List<MemoryPoolMXBean> list=ManagementFactory.getMemoryPoolMXBeans();
         for(MemoryPoolMXBean mem:list){
          System.out.println("Java 虚拟机启动以来或自峰值重置以来此内存池的峰值内存使用量"+mem.getPeakUsage());
          System.out.println("返回此内存池的类型"+mem.getType());
          System.out.println("内存使用量超过其阈值的次数"+ mem.getUsage());
         }
         //Java 虚拟机内存系统的管理接口。 MemoryMXBean
         MemoryMXBean mem=(MemoryMXBean)ManagementFactory.getMemoryMXBean();
         System.out.println(" 返回用于对象分配的堆的当前内存使用量"+mem.getHeapMemoryUsage());
         System.out.println("Java 虚拟机使用的非堆内存的当前内存使用量"+mem.getNonHeapMemoryUsage());
         // Java 虚拟机的编译系统的管理接口 CompilationMXBean
         CompilationMXBean com=(CompilationMXBean)ManagementFactory.getCompilationMXBean();
         System.out.println("即时 (JIT) 编译器的名称"+com.getName());
         System.out.println("在编译上花费的累积耗费时间的近似值(毫秒)"+com.getTotalCompilationTime());
         
         //Java 虚拟机的类加载系统的管理接口 ClassLoadingMXBean
         ClassLoadingMXBean cl=(ClassLoadingMXBean)ManagementFactory.getClassLoadingMXBean();
         System.out.println("当前加载到 Java 虚拟机中的类的数量"+cl.getLoadedClassCount());
         System.out.println("Java 虚拟机开始执行到目前已经加载的类的总数"+cl.getTotalLoadedClassCount());
         System.out.println("Java 虚拟机开始执行到目前已经卸载的类的总数"+cl.getUnloadedClassCount());
       
       
    }

}

原创粉丝点击