软件包 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
本文详细介绍Java虚拟机(JVM)的监控与管理接口,包括类加载、内存、线程、垃圾回收等关键系统的管理方法,展示如何获取JVM及操作系统信息。
2279

被折叠的 条评论
为什么被折叠?



