首先是在网上找的介绍MXBeans的一段描述:
Java 应用程序实例是受底层操作系统支持的进程。在 Java Platform, Standard Edition 5 (Java SE) 发行之前,能够在运行时有效和可靠收集的内部及标准化 JVM 诊断信息非常有限。现在,java.lang.management
接口提供了一些有用的监控点,该接口是所有兼容 Java SE 5(和更新版本)的 JVM 版本的标准。这些 JVM 的某些实现提供了额外的属性指标,但是它们的访问模式却基本相同。我将重点介绍可以通过 JVM 的 MXBeans 访问的标准模式 — 部署在 VM 内部的 JMX MBeans 公开了一个管理和监控接口:
ClassLoadingMXBean
:监控类加载系统。CompilationMXBean
:监控编译系统。GarbageCollectionMXBean
:监控 JVM 的垃圾收集器。MemoryMXBean
:监控 JVM 的堆和非堆内存空间。MemoryPoolMXBean
:监控 JVM 分配的内存池。RuntimeMXBean
:监控运行时系统。该 MXBean 提供的有用监控指标很少,但它确实提供了 JVM 的输入参数和启动时间及运行时间,这两者在其他派生指标中都是很有用的。ThreadMXBean
:监控线程系统。
Javadoc中有更详细的描述。
通过java.lang.management.ManagementFactory的一系列get方法,我们可以得到不同类型的MXBeans。
如:
ManagementFactory.getRuntimeMXBean();
ManagementFactory.getClassLoadingMXBean();
一个小应用: 如何在代码中取得java进程号:
RuntimeMXBean runtimeBean = ManagementFactory.getRuntimeMXBean();
String beanName = runtimeBean.getName();
//Returns the name representing the running Java virtual machine. 通常是 “进程号@主机名”
String pid = beanName.substring(0, beanName.indexOf("@"));