java使用java.lang.management监视和管理 Java 虚拟机
转载
2012年05月31日 13:34:54
<ul class="article_tags clearfix csdn-tracking-statistics" data-mod="popu_377">
<li class="tit">标签:</li>
<li><a href="http://so.csdn.net/so/search/s.do?q=java&t=blog" target="_blank">java</a> <span>/</span></li>
<li><a href="http://so.csdn.net/so/search/s.do?q=虚拟机&t=blog" target="_blank">虚拟机</a> <span>/</span></li>
<li><a href="http://so.csdn.net/so/search/s.do?q=jvm&t=blog" target="_blank">jvm</a> <span>/</span></li>
<li><a href="http://so.csdn.net/so/search/s.do?q=string&t=blog" target="_blank">string</a> <span>/</span></li>
<li><a href="http://so.csdn.net/so/search/s.do?q=jdk&t=blog" target="_blank">jdk</a> <span style="display: none;">/</span></li>
<!-- [endarticletags]-->
</ul>
<ul class="right_bar">
<li><button class="btn-noborder"><i class="icon iconfont icon-read"></i><span class="txt">7149</span></button></li>
<li class="edit" style="display: none;">
<a class="btn-noborder" href="http://write.blog.csdn.net/postedit/7619383">
<i class="icon iconfont icon-bianji"></i><span class="txt">编辑</span>
</a>
</li>
<li class="del" style="display: none;">
<a class="btn-noborder" onclick="javascript:deleteArticle(fileName);return false;">
<i class="icon iconfont icon-shanchu"></i><span class="txt">删除</span>
</a>
</li>
</ul>
</div>
<div id="article_content" class="article_content csdn-tracking-statistics" data-mod="popu_519" data-dsm="post" style="overflow: hidden;">
软件包 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();
- // }
- }
- }
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 FilesJavajdk1.6.0jrelib esources.jar;C:Program FilesJavajdk1.6.0jrelib t.jar;C:Program FilesJavajdk1.6.0jrelibsunrsasign.jar;C:Program FilesJavajdk1.6.0jrelibjsse.jar;C:Program FilesJavajdk1.6.0jrelibjce.jar;C:Program FilesJavajdk1.6.0jrelibcharsets.jar;C:Program FilesJavajdk1.6.0jreclasses
- 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
jvm name:Java HotSpot(TM) Client VM jvm version:1.6.0-b105 jvm bootClassPath:C:Program FilesJavajdk1.6.0jrelib esources.jar;C:Program FilesJavajdk1.6.0jrelib t.jar;C:Program FilesJavajdk1.6.0jrelibsunrsasign.jar;C:Program FilesJavajdk1.6.0jrelibjsse.jar;C:Program FilesJavajdk1.6.0jrelibjce.jar;C:Program FilesJavajdk1.6.0jrelibcharsets.jar;C:Program FilesJavajdk1.6.0jreclasses 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