• java使用java.lang.management监视和管理 Java 虚拟机


    软件包 java.lang.management

    提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。

     

    接口摘要

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

    Java 虚拟机线程系统的管理接口。




    import java.lang.management.ClassLoadingMXBean;
    import java.lang.management.CompilationMXBean;
    import java.lang.management.GarbageCollectorMXBean;
    import java.lang.management.ManagementFactory;
    import java.lang.management.MemoryMXBean;
    import java.lang.management.MemoryManagerMXBean;
    import java.lang.management.MemoryPoolMXBean;
    import java.lang.management.MemoryUsage;
    import java.lang.management.OperatingSystemMXBean;
    import java.lang.management.RuntimeMXBean;
    import java.lang.management.ThreadMXBean;
    import java.util.List;
    
    import javax.management.MBeanServerConnection;
    
    public class MBeanDemo {
    
        public static void main(String[] args) {
    
            showJvmInfo();
            showMemoryInfo();
            showSystem();
            showClassLoading();
            showCompilation();
            showThread();
            showGarbageCollector();
            showMemoryManager();
            showMemoryPool();
        }
    
        /**
         * Java 虚拟机的运行时系统
         */
        public static void showJvmInfo() {
            RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean();
            String vendor = mxbean.getVmVendor();
            System.out.println("jvm name:" + mxbean.getVmName());
            System.out.println("jvm version:" + mxbean.getVmVersion());
            System.out.println("jvm bootClassPath:" + mxbean.getBootClassPath());
            System.out.println("jvm start time:" + mxbean.getStartTime());
        }
    
        /**
         * Java 虚拟机的内存系统
         */
        public static void showMemoryInfo() {
            MemoryMXBean mem = ManagementFactory.getMemoryMXBean();
            MemoryUsage heap = mem.getHeapMemoryUsage();
            System.out.println("Heap committed:" + heap.getCommitted() + " init:" + heap.getInit() + " max:"
                               + heap.getMax() + " used:" + heap.getUsed());
        }
    
        /**
         * Java 虚拟机在其上运行的操作系统
         */
        public static void showSystem() {
            OperatingSystemMXBean op = ManagementFactory.getOperatingSystemMXBean();
            System.out.println("Architecture: " + op.getArch());
            System.out.println("Processors: " + op.getAvailableProcessors());
            System.out.println("System name: " + op.getName());
            System.out.println("System version: " + op.getVersion());
            System.out.println("Last minute load: " + op.getSystemLoadAverage());
        }
        
        /**
         * Java 虚拟机的类加载系统
         */
        public static void showClassLoading(){
            ClassLoadingMXBean cl = ManagementFactory.getClassLoadingMXBean();
            System.out.println("TotalLoadedClassCount: " + cl.getTotalLoadedClassCount());
            System.out.println("LoadedClassCount" + cl.getLoadedClassCount());
            System.out.println("UnloadedClassCount:" + cl.getUnloadedClassCount());
        }
        
        /**
         * Java 虚拟机的编译系统
         */
        public static void showCompilation(){
            CompilationMXBean com = ManagementFactory.getCompilationMXBean();
            System.out.println("TotalCompilationTime:" + com.getTotalCompilationTime());
            System.out.println("name:" + com.getName());
        }
        
        /**
         * Java 虚拟机的线程系统
         */
        public static void showThread(){
            ThreadMXBean thread = ManagementFactory.getThreadMXBean();
            System.out.println("ThreadCount" + thread.getThreadCount());
            System.out.println("AllThreadIds:" + thread.getAllThreadIds());
            System.out.println("CurrentThreadUserTime" + thread.getCurrentThreadUserTime());
            //......还有其他很多信息
        }
        
        /**
         * Java 虚拟机中的垃圾回收器。
         */
        public static void showGarbageCollector(){
            List<GarbageCollectorMXBean> gc = ManagementFactory.getGarbageCollectorMXBeans();
            for(GarbageCollectorMXBean GarbageCollectorMXBean : gc){
                System.out.println("name:" + GarbageCollectorMXBean.getName()); 
                System.out.println("CollectionCount:" + GarbageCollectorMXBean.getCollectionCount());
                System.out.println("CollectionTime" + GarbageCollectorMXBean.getCollectionTime());  
            }
        }
        
        /**
         * Java 虚拟机中的内存管理器
         */
        public static void showMemoryManager(){
            List<MemoryManagerMXBean> mm = ManagementFactory.getMemoryManagerMXBeans();
            for(MemoryManagerMXBean eachmm: mm){
                System.out.println("name:" + eachmm.getName());
                System.out.println("MemoryPoolNames:" + eachmm.getMemoryPoolNames().toString());
            }
        }
        
        /**
         * Java 虚拟机中的内存池
         */
        public static void showMemoryPool(){
            List<MemoryPoolMXBean> mps = ManagementFactory.getMemoryPoolMXBeans();
            for(MemoryPoolMXBean mp : mps){
                System.out.println("name:" + mp.getName());
                System.out.println("CollectionUsage:" + mp.getCollectionUsage());
                System.out.println("type:" + mp.getType());
            }
        }
        
        /**
         * 访问 MXBean 的方法的三种方法
         */
        public static void visitMBean(){
            
            //第一种直接调用同一 Java 虚拟机内的 MXBean 中的方法。
            RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean();
            String vendor1 = mxbean.getVmVendor();
            System.out.println("vendor1:" + vendor1);
            
            //第二种通过一个连接到正在运行的虚拟机的平台 MBeanServer 的 MBeanServerConnection。
            MBeanServerConnection mbs = null;
            // Connect to a running JVM (or itself) and get MBeanServerConnection
            // that has the JVM MXBeans registered in it
    
            /*
            try {
                // Assuming the RuntimeMXBean has been registered in mbs
                ObjectName oname = new ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME);
                String vendor2 = (String) mbs.getAttribute(oname, "VmVendor");
                System.out.println("vendor2:" + vendor2);
            } catch (Exception e) {
                e.printStackTrace();
            }
            */
            
            //第三种使用 MXBean 代理
    //        MBeanServerConnection mbs3 = null;
    //        RuntimeMXBean proxy;
    //        try {
    //            proxy = ManagementFactory.newPlatformMXBeanProxy(mbs3,ManagementFactory.RUNTIME_MXBEAN_NAME,
    //                                                     RuntimeMXBean.class);
    //            String vendor = proxy.getVmVendor();
    //        } catch (IOException e) {
    //            e.printStackTrace();
    //        }
    
        }
    
    }
    

    输出:
       
       
       
    jvm name:Java HotSpot(TM) Client VM
    jvm version:1.6.0-b105
    jvm bootClassPath:C:\Program Files\Java\jdk1.6.0\jre\lib\resources.jar;C:\Program Files\Java\jdk1.6.0\jre\lib\rt.jar;C:\Program Files\Java\jdk1.6.0\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.6.0\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.6.0\jre\lib\jce.jar;C:\Program Files\Java\jdk1.6.0\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.6.0\jre\classes
    jvm start time:1307440032774
    Heap committed:5177344 init:0 max:66650112 used:632640
    Architecture: x86
    Processors: 2
    System name: Windows XP
    System version: 5.1
    Last minute load: -1.0
    TotalLoadedClassCount: 381
    LoadedClassCount381
    UnloadedClassCount:0
    TotalCompilationTime:3
    name:HotSpot Client Compiler
    ThreadCount5
    AllThreadIds:[J@47b480
    CurrentThreadUserTime15625000
    name:Copy
    CollectionCount:0
    CollectionTime0
    name:MarkSweepCompact
    CollectionCount:0
    CollectionTime0
    name:CodeCacheManager
    MemoryPoolNames:[Ljava.lang.String;@1389e4
    name:Copy
    MemoryPoolNames:[Ljava.lang.String;@c20e24
    name:MarkSweepCompact
    MemoryPoolNames:[Ljava.lang.String;@2e7263
    name:Code Cache
    CollectionUsage:null
    type:Non-heap memory
    name:Eden Space
    CollectionUsage:init = 917504(896K) used = 0(0K) committed = 0(0K) max = 4194304(4096K)
    type:Heap memory
    name:Survivor Space
    CollectionUsage:init = 65536(64K) used = 0(0K) committed = 0(0K) max = 458752(448K)
    type:Heap memory
    name:Tenured Gen
    CollectionUsage:init = 4194304(4096K) used = 0(0K) committed = 0(0K) max = 61997056(60544K)
    type:Heap memory
    name:Perm Gen
    CollectionUsage:init = 12582912(12288K) used = 0(0K) committed = 0(0K) max = 67108864(65536K)
    type:Non-heap memory
    name:Perm Gen [shared-ro]
    CollectionUsage:init = 8388608(8192K) used = 0(0K) committed = 0(0K) max = 8388608(8192K)
    type:Non-heap memory
    name:Perm Gen [shared-rw]
    CollectionUsage:init = 12582912(12288K) used = 0(0K) committed = 0(0K) max = 12582912(12288K)
    type:Non-heap memory
    


  • 相关阅读:
    数据结构2_java---栈,括号匹配
    数据结构1_java---单链表的操作,约瑟夫问题
    算法---ALGO-3 Java K好数 蓝桥杯
    算法---区间K大数查找 Java 蓝桥杯ALGO-1
    算法---进制转换,八进制,十六进制,二进制
    实用---java保留小数点后位数以及输出反转数字
    实用---生命游戏 Java
    实用---GUI的搭建,windowbuilder的使用
    如今大火的算法框架TensorFlow,都有哪些值得一看的好书呢?
    如今大火的算法框架TensorFlow,都有哪些值得一看的好书呢?
  • 原文地址:https://www.cnblogs.com/secbook/p/2655183.html
Copyright © 2020-2023  润新知