但行好事
莫论前程❤

java.lang.management包——实现监视和管理 Java 虚拟机

软件包 java.lang.management

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

接口摘要

ClassLoadingMXBean用于 Java 虚拟机的类加载系统的管理接口。
CompilationMXBean用于 Java 虚拟机的编译系统的管理接口。
GarbageCollectorMXBean用于 Java 虚拟机的垃圾回收的管理接口。
MemoryManagerMXBean内存管理器的管理接口。
MemoryMXBeanJava 虚拟机的内存系统的管理接口。
MemoryPoolMXBean内存池的管理接口。
OperatingSystemMXBean用于操作系统的管理接口,Java 虚拟机在此操作系统上运行。
RuntimeMXBeanJava 虚拟机的运行时系统的管理接口。
ThreadMXBeanJava 虚拟机线程系统的管理接口。
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) 64-Bit Server VM  
jvm version:25.73-b02  
jvm bootClassPath:C:\Program Files\Java\jdk1.8.0_73\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_73\jre\classes  
jvm start time:1466262407530  
Heap committed:128974848 init:134217728 max:1890582528 used:2726800  
Architecture: amd64  
Processors: 4  
System name: Windows 8.1  
System version: 6.3  
Last minute load: -1.0  
TotalLoadedClassCount: 447  
LoadedClassCount447  
UnloadedClassCount:0  
TotalCompilationTime:13  
name:HotSpot 64-Bit Tiered Compilers  
ThreadCount5  
AllThreadIds:[J@2a139a55  
CurrentThreadUserTime140625000  
name:PS Scavenge  
CollectionCount:0  
CollectionTime0  
name:PS MarkSweep  
CollectionCount:0  
CollectionTime0  
name:CodeCacheManager  
MemoryPoolNames:[Ljava.lang.String;@15db9742  
name:Metaspace Manager  
MemoryPoolNames:[Ljava.lang.String;@6d06d69c  
name:PS Scavenge  
MemoryPoolNames:[Ljava.lang.String;@7852e922  
name:PS MarkSweep  
MemoryPoolNames:[Ljava.lang.String;@4e25154f  
name:Code Cache  
CollectionUsage:null  
type:Non-heap memory  
name:Metaspace  
CollectionUsage:null  
type:Non-heap memory  
name:Compressed Class Space  
CollectionUsage:null  
type:Non-heap memory  
name:PS Eden Space  
CollectionUsage:init = 34078720(33280K) used = 0(0K) committed = 0(0K) max = 698351616(681984K)  
type:Heap memory  
name:PS Survivor Space  
CollectionUsage:init = 5242880(5120K) used = 0(0K) committed = 0(0K) max = 5242880(5120K)  
type:Heap memory  
name:PS Old Gen  
CollectionUsage:init = 89653248(87552K) used = 0(0K) committed = 0(0K) max = 1417674752(1384448K)  
type:Heap memory  
赞(1) 打赏
未经允许不得转载:刘鹏博客 » java.lang.management包——实现监视和管理 Java 虚拟机
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏