接口 | 描述 |
---|---|
BufferPoolMXBean | |
ClassLoadingMXBean |
Java虚拟机的类加载系统的管理界面。
|
CompilationMXBean |
Java虚拟机编译系统的管理界面。
|
GarbageCollectorMXBean |
用于Java虚拟机垃圾收集的管理界面。
|
MemoryManagerMXBean |
内存管理器的管理界面。
|
MemoryMXBean |
Java虚拟机的内存系统的管理界面。
|
MemoryPoolMXBean |
内存池的管理界面。
|
OperatingSystemMXBean |
运行Java虚拟机的操作系统的管理界面。
|
PlatformLoggingMXBean | |
PlatformManagedObject |
一个平台管理对象是JMX MXBean在Java平台监控和管理的组成部分。
|
RuntimeMXBean |
Java虚拟机的运行时系统的管理界面。
|
ThreadMXBean |
Java虚拟机线程系统的管理界面。
|
类 | 描述 |
---|---|
LockInfo |
有关
锁的信息 。
|
ManagementFactory |
ManagementFactory 类是用于获取Java平台的托管Bean的工厂类。
|
ManagementPermission |
当SecurityManager运行的代码调用在Java平台的管理界面中定义的方法时,SecurityManager将检查的权限。
|
MemoryNotificationInfo |
有关内存通知的信息。
|
MemoryUsage |
MemoryUsage对象表示内存使用的快照。
|
MonitorInfo |
有关对象监视器锁的信息。
|
ThreadInfo |
线程信息。
|
Enum | 描述 |
---|---|
MemoryType |
类型 memory pools 。
|
平台MXBean是符合JMX仪器规范的托管bean ,仅使用一组基本数据类型。 每个平台MXBean是一个PlatformManagedObject
与唯一的name 。
ManagementFactory
类是Java平台的管理工厂类。 此类提供了一组静态工厂方法来获取Java平台的MXBeans,以允许应用程序直接访问MXBean。
可以使用getPlatformMBeanServer
方法访问平台MBeanServer 。 在首次调用此方法时,它创建平台MBeanServer并注册所有平台MXBeans,包括platform MXBeans 。 每个平台MXBean都使用管理界面规范中定义的唯一名称进行注册。 这是一个单独的MBeanServer,可以在同一个Java虚拟机中运行的不同托管组件共享。
运行虚拟机的管理应用程序和平台MBeanServer可以互操作,而不需要平台MXBean接口使用的类。 在JMX连接器服务器和连接器客户端之间传输的数据类型是JMX open types ,这允许跨版本进行互操作。 当通过MBeanServer接口访问时,MXBean接口使用的数据类型将映射到打开类型。 有关详细信息,请参阅MXBean规范。
应用程序可以通过以下方式监视Java虚拟机和运行时的工具:
1.直接访问MXBean界面
RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean();
// Get the standard attribute "VmVendor"
String vendor = mxbean.getVmVendor();
或通过致电getPlatformMXBean
或getPlatformMXBeans
方法:
RuntimeMXBean mxbean = ManagementFactory.getPlatformMXBean(RuntimeMXBean.class);
// Get the standard attribute "VmVendor"
String vendor = mxbean.getVmVendor();
MBeanServerConnection mbs;
// Connect to a running JVM (or itself) and get MBeanServerConnection
// that has the JVM MBeans registered in it
...
// Get a MBean proxy for RuntimeMXBean interface
RuntimeMXBean proxy =
ManagementFactory.getPlatformMXBean
(mbs,
RuntimeMXBean.class);
// Get standard attribute "VmVendor"
String vendor = proxy.getVmVendor();
代理通常用于访问远程Java虚拟机中的MXBean。 创建MXBean代理的另一种方法是:
RuntimeMXBean proxy =
ManagementFactory.newPlatformMXBeanProxy
(mbs,
ManagementFactory.RUNTIME_MXBEAN_NAME,
RuntimeMXBean.class);
2.通过MBeanServer间接访问MXBean接口
platform MBeanServer
访问本地的MXBeans或特定的MBeanServerConnection
远程访问MXBeans。 MXBean的属性和操作仅使用JMX打开类型 ,其中包括OpenType
中定义的基本数据类型CompositeData
和TabularData
。 MBeanServerConnection mbs;
// 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);
// Get standard attribute "VmVendor"
String vendor = (String) mbs.getAttribute(oname, "VmVendor");
} catch (....) {
// Catch the exceptions thrown by ObjectName constructor
// and MBeanServer.getAttribute method
...
}
Java虚拟机实现可以通过定义依赖于平台的接口将其平台扩展添加到管理接口,扩展标准管理接口以包括平台特定的度量和管理操作。 ManagementFactory类中的静态工厂方法将返回具有平台扩展名的MXBeans。
建议使用供应商特定的前缀(如供应商名称)来命名特定于平台的属性,以避免将来的扩展到标准管理界面和平台扩展之间的属性名称冲突。 如果标准管理接口的未来扩展定义了管理界面的新属性,并且属性名称与某些特定于供应商的属性的名称相同,则访问该供应商特定属性的应用程序将必须进行修改以应对版本和兼容性问题。
以下是展示如何从平台扩展程序访问属性的示例:
1)直接访问Oracle特定的MXBean界面
List<com.sun.management.GarbageCollectorMXBean> mxbeans = ManagementFactory.getPlatformMXBeans(com.sun.management.GarbageCollectorMXBean.class); for (com.sun.management.GarbageCollectorMXBean gc : mxbeans) { // Get the standard attribute "CollectionCount" String count = mxbean.getCollectionCount(); // Get the platform-specific attribute "LastGcInfo" GcInfo gcinfo = gc.getLastGcInfo(); ... }
2)通过代理通过MBeanServer访问Oracle特定的MXBean接口
MBeanServerConnection mbs; // Connect to a running JVM (or itself) and get MBeanServerConnection // that has the JVM MXBeans registered in it ... List<com.sun.management.GarbageCollectorMXBean> mxbeans = ManagementFactory.getPlatformMXBeans(mbs, com.sun.management.GarbageCollectorMXBean.class); for (com.sun.management.GarbageCollectorMXBean gc : mxbeans) { // Get the standard attribute "CollectionCount" String count = mxbean.getCollectionCount(); // Get the platform-specific attribute "LastGcInfo" GcInfo gcinfo = gc.getLastGcInfo(); ... }
除非另有说明,否则将NullPointerException
参数传递给此程序包中任何类或接口中的构造函数或方法将导致抛出NullPointerException
。
java.lang.management API是线程安全的。