7.4java.lang.management包

软件包 java.lang.management

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

接口摘要

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

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

[java]  view plain  copy
  1. import java.lang.management.ClassLoadingMXBean;  
  2. import java.lang.management.CompilationMXBean;  
  3. import java.lang.management.GarbageCollectorMXBean;  
  4. import java.lang.management.ManagementFactory;  
  5. import java.lang.management.MemoryMXBean;  
  6. import java.lang.management.MemoryManagerMXBean;  
  7. import java.lang.management.MemoryPoolMXBean;  
  8. import java.lang.management.MemoryUsage;  
  9. import java.lang.management.OperatingSystemMXBean;  
  10. import java.lang.management.RuntimeMXBean;  
  11. import java.lang.management.ThreadMXBean;  
  12. import java.util.List;  
  13.   
  14. import javax.management.MBeanServerConnection;  
  15.   
  16. public class MBeanDemo {  
  17.   
  18.     public static void main(String[] args) {  
  19.   
  20.         showJvmInfo();  
  21.         showMemoryInfo();  
  22.         showSystem();  
  23.         showClassLoading();  
  24.         showCompilation();  
  25.         showThread();  
  26.         showGarbageCollector();  
  27.         showMemoryManager();  
  28.         showMemoryPool();  
  29.     }  
  30.   
  31.     /** 
  32.      * Java 虚拟机的运行时系统 
  33.      */  
  34.     public static void showJvmInfo() {  
  35.         RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean();  
  36.         String vendor = mxbean.getVmVendor();  
  37.         System.out.println("jvm name:" + mxbean.getVmName());  
  38.         System.out.println("jvm version:" + mxbean.getVmVersion());  
  39.         System.out.println("jvm bootClassPath:" + mxbean.getBootClassPath());  
  40.         System.out.println("jvm start time:" + mxbean.getStartTime());  
  41.     }  
  42.   
  43.     /** 
  44.      * Java 虚拟机的内存系统 
  45.      */  
  46.     public static void showMemoryInfo() {  
  47.         MemoryMXBean mem = ManagementFactory.getMemoryMXBean();  
  48.         MemoryUsage heap = mem.getHeapMemoryUsage();  
  49.         System.out.println("Heap committed:" + heap.getCommitted() + " init:" + heap.getInit() + " max:"  
  50.                            + heap.getMax() + " used:" + heap.getUsed());  
  51.     }  
  52.   
  53.     /** 
  54.      * Java 虚拟机在其上运行的操作系统 
  55.      */  
  56.     public static void showSystem() {  
  57.         OperatingSystemMXBean op = ManagementFactory.getOperatingSystemMXBean();  
  58.         System.out.println("Architecture: " + op.getArch());  
  59.         System.out.println("Processors: " + op.getAvailableProcessors());  
  60.         System.out.println("System name: " + op.getName());  
  61.         System.out.println("System version: " + op.getVersion());  
  62.         System.out.println("Last minute load: " + op.getSystemLoadAverage());  
  63.     }  
  64.       
  65.     /** 
  66.      * Java 虚拟机的类加载系统 
  67.      */  
  68.     public static void showClassLoading(){  
  69.         ClassLoadingMXBean cl = ManagementFactory.getClassLoadingMXBean();  
  70.         System.out.println("TotalLoadedClassCount: " + cl.getTotalLoadedClassCount());  
  71.         System.out.println("LoadedClassCount" + cl.getLoadedClassCount());  
  72.         System.out.println("UnloadedClassCount:" + cl.getUnloadedClassCount());  
  73.     }  
  74.       
  75.     /** 
  76.      * Java 虚拟机的编译系统 
  77.      */  
  78.     public static void showCompilation(){  
  79.         CompilationMXBean com = ManagementFactory.getCompilationMXBean();  
  80.         System.out.println("TotalCompilationTime:" + com.getTotalCompilationTime());  
  81.         System.out.println("name:" + com.getName());  
  82.     }  
  83.       
  84.     /** 
  85.      * Java 虚拟机的线程系统 
  86.      */  
  87.     public static void showThread(){  
  88.         ThreadMXBean thread = ManagementFactory.getThreadMXBean();  
  89.         System.out.println("ThreadCount" + thread.getThreadCount());  
  90.         System.out.println("AllThreadIds:" + thread.getAllThreadIds());  
  91.         System.out.println("CurrentThreadUserTime" + thread.getCurrentThreadUserTime());  
  92.         //......还有其他很多信息  
  93.     }  
  94.       
  95.     /** 
  96.      * Java 虚拟机中的垃圾回收器。 
  97.      */  
  98.     public static void showGarbageCollector(){  
  99.         List<GarbageCollectorMXBean> gc = ManagementFactory.getGarbageCollectorMXBeans();  
  100.         for(GarbageCollectorMXBean GarbageCollectorMXBean : gc){  
  101.             System.out.println("name:" + GarbageCollectorMXBean.getName());   
  102.             System.out.println("CollectionCount:" + GarbageCollectorMXBean.getCollectionCount());  
  103.             System.out.println("CollectionTime" + GarbageCollectorMXBean.getCollectionTime());    
  104.         }  
  105.     }  
  106.       
  107.     /** 
  108.      * Java 虚拟机中的内存管理器 
  109.      */  
  110.     public static void showMemoryManager(){  
  111.         List<MemoryManagerMXBean> mm = ManagementFactory.getMemoryManagerMXBeans();  
  112.         for(MemoryManagerMXBean eachmm: mm){  
  113.             System.out.println("name:" + eachmm.getName());  
  114.             System.out.println("MemoryPoolNames:" + eachmm.getMemoryPoolNames().toString());  
  115.         }  
  116.     }  
  117.       
  118.     /** 
  119.      * Java 虚拟机中的内存池 
  120.      */  
  121.     public static void showMemoryPool(){  
  122.         List<MemoryPoolMXBean> mps = ManagementFactory.getMemoryPoolMXBeans();  
  123.         for(MemoryPoolMXBean mp : mps){  
  124.             System.out.println("name:" + mp.getName());  
  125.             System.out.println("CollectionUsage:" + mp.getCollectionUsage());  
  126.             System.out.println("type:" + mp.getType());  
  127.         }  
  128.     }  
  129.       
  130.     /** 
  131.      * 访问 MXBean 的方法的三种方法 
  132.      */  
  133.     public static void visitMBean(){  
  134.           
  135.         //第一种直接调用同一 Java 虚拟机内的 MXBean 中的方法。  
  136.         RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean();  
  137.         String vendor1 = mxbean.getVmVendor();  
  138.         System.out.println("vendor1:" + vendor1);  
  139.           
  140.         //第二种通过一个连接到正在运行的虚拟机的平台 MBeanServer 的 MBeanServerConnection。  
  141.         MBeanServerConnection mbs = null;  
  142.         // Connect to a running JVM (or itself) and get MBeanServerConnection  
  143.         // that has the JVM MXBeans registered in it  
  144.   
  145.         /* 
  146.         try { 
  147.             // Assuming the RuntimeMXBean has been registered in mbs 
  148.             ObjectName oname = new ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME); 
  149.             String vendor2 = (String) mbs.getAttribute(oname, "VmVendor"); 
  150.             System.out.println("vendor2:" + vendor2); 
  151.         } catch (Exception e) { 
  152.             e.printStackTrace(); 
  153.         } 
  154.         */  
  155.           
  156.         //第三种使用 MXBean 代理  
  157. //        MBeanServerConnection mbs3 = null;  
  158. //        RuntimeMXBean proxy;  
  159. //        try {  
  160. //            proxy = ManagementFactory.newPlatformMXBeanProxy(mbs3,ManagementFactory.RUNTIME_MXBEAN_NAME,  
  161. //                                                     RuntimeMXBean.class);  
  162. //            String vendor = proxy.getVmVendor();  
  163. //        } catch (IOException e) {  
  164. //            e.printStackTrace();  
  165. //        }  
  166.   
  167.     }  
  168.   
  169. }  
运行结果:

[java]  view plain  copy
  1. jvm name:Java HotSpot(TM) 64-Bit Server VM  
  2. jvm version:25.73-b02  
  3. 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  
  4. jvm start time:1466262407530  
  5. Heap committed:128974848 init:134217728 max:1890582528 used:2726800  
  6. Architecture: amd64  
  7. Processors: 4  
  8. System name: Windows 8.1  
  9. System version: 6.3  
  10. Last minute load: -1.0  
  11. TotalLoadedClassCount: 447  
  12. LoadedClassCount447  
  13. UnloadedClassCount:0  
  14. TotalCompilationTime:13  
  15. name:HotSpot 64-Bit Tiered Compilers  
  16. ThreadCount5  
  17. AllThreadIds:[J@2a139a55  
  18. CurrentThreadUserTime140625000  
  19. name:PS Scavenge  
  20. CollectionCount:0  
  21. CollectionTime0  
  22. name:PS MarkSweep  
  23. CollectionCount:0  
  24. CollectionTime0  
  25. name:CodeCacheManager  
  26. MemoryPoolNames:[Ljava.lang.String;@15db9742  
  27. name:Metaspace Manager  
  28. MemoryPoolNames:[Ljava.lang.String;@6d06d69c  
  29. name:PS Scavenge  
  30. MemoryPoolNames:[Ljava.lang.String;@7852e922  
  31. name:PS MarkSweep  
  32. MemoryPoolNames:[Ljava.lang.String;@4e25154f  
  33. name:Code Cache  
  34. CollectionUsage:null  
  35. type:Non-heap memory  
  36. name:Metaspace  
  37. CollectionUsage:null  
  38. type:Non-heap memory  
  39. name:Compressed Class Space  
  40. CollectionUsage:null  
  41. type:Non-heap memory  
  42. name:PS Eden Space  
  43. CollectionUsage:init = 34078720(33280K) used = 0(0K) committed = 0(0K) max = 698351616(681984K)  
  44. type:Heap memory  
  45. name:PS Survivor Space  
  46. CollectionUsage:init = 5242880(5120K) used = 0(0K) committed = 0(0K) max = 5242880(5120K)  
  47. type:Heap memory  
  48. name:PS Old Gen  
  49. CollectionUsage:init = 89653248(87552K) used = 0(0K) committed = 0(0K) max = 1417674752(1384448K)  
  50. type:Heap memory  

参考文件:

(原文)http://blog.csdn.net/zhongweijian/article/details/7619383

[Java性能剖析]JVM Management API

java.lang.management.ManagementFactory学习

跟我学系列之JVM远程监控编写(一)

扫描二维码关注公众号,回复: 1035254 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_18048847/article/details/80433836