java使用java.lang.management监视和管理 Java 虚拟机
转:http://chain.blog.163.com/blog/static/140848523201171623521235/
软件包 java.lang.management
提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。
?
接口摘要ClassLoadingMXBean用于 Java 虚拟机的类加载系统的管理接口。CompilationMXBean用于 Java 虚拟机的编译系统的管理接口。GarbageCollectorMXBean用于 Java 虚拟机的垃圾回收的管理接口。MemoryManagerMXBean内存管理器的管理接口。MemoryMXBeanJava 虚拟机的内存系统的管理接口。MemoryPoolMXBean内存池的管理接口。OperatingSystemMXBean用于操作系统的管理接口,Java 虚拟机在此操作系统上运行。RuntimeMXBeanJava 虚拟机的运行时系统的管理接口。ThreadMXBeanJava 虚拟机线程系统的管理接口。?
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();??
- //????????}??
- ??
- ????}??
- ??
- }??
?
输出:
?
Java代码??
- 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 ?