ManagementFactory
类是为 Java 平台获取托管 bean 的工厂类。此类由静态方法组成,每个方法返回一个或多个平台 MXBeans表示 Java 虚拟机组件的管理接口。
平台 MXBean
平台 MXBean 是托管bean符合 JMX Instrumentation Specification 并且仅使用一组基本数据类型。 JMX 管理应用程序和 平台MBeanServer 可以互操作,而无需 MXBean 特定数据类型的类。在 JMX 连接器服务和连接器客户端之间传输的数据类型是开放类型,这允许跨版本互操作。有关详细信息,请参阅 MXBeans规范。
每个平台 MXBean 都是一个 PlatformManagedObject
,它有一个唯一的 ObjectName
用于在平台 MBeanServer
中注册,由 getObjectName
方法返回。
应用程序可以通过以下方式访问平台 MXBean:
1.直接访问一个MXBean接口
- 通过调用
getPlatformMXBean
或getPlatformMXBeans
方法获取 MXBean 实例,并在运行的虚拟机本地访问 MXBean。- 构造一个 MXBean 代理实例,通过调用
getPlatformMXBean(MBeanServerConnection, Class)
或getPlatformMXBeans(MBeanServerConnection, Class)
方法将方法调用转发给给定的MBeanServer
。newPlatformMXBeanProxy
方法也可用于构造给定ObjectName
的 MXBean 代理实例。代理通常用于远程访问另一个正在运行的虚拟机的 MXBean。2. 通过 MBeanServer 间接访问 MXBean 接口
- 通过平台
MBeanServer
在本地访问 MXBeans 或通过特定的MBeanServerConnection
远程访问 MXBeans。 MXBean 的属性和操作仅使用 JMX open types,其中包括基本数据类型、CompositeData
和OpenType
中定义的TabularData
。该map在 MXBean 规范中指定以获取详细信息。
getPlatformManagementInterfaces
方法返回 Java 虚拟机支持的所有管理接口,包括下表中列出的标准管理接口以及 JDK 实现扩展的管理接口。
Java 虚拟机具有以下管理接口的单个实例:
Java 虚拟机具有以下管理接口的零个或单个实例。
管理接口 | ObjectName |
---|---|
CompilationMXBean |
java.lang:type=Compilation |
Java 虚拟机可能具有以下管理接口的一个或多个实例。
管理接口 | ObjectName |
---|---|
GarbageCollectorMXBean |
java.lang:type=GarbageCollector ,name= 收集器的名称 |
MemoryManagerMXBean |
java.lang:type=MemoryManager ,name= 管理者的名称 |
MemoryPoolMXBean |
java.lang:type=MemoryPool ,name= 游泳池的名字 |
BufferPoolMXBean |
java.nio:type=BufferPool,name= 池名 |
- 自从:
- 1.5
- 参见:
-
字段摘要
字段修饰符和类型Field描述static final String
ClassLoadingMXBean
的ObjectName
的字符串表示。static final String
CompilationMXBean
的ObjectName
的字符串表示。static final String
GarbageCollectorMXBean
的ObjectName
中的域名和类型键属性。static final String
ObjectName
中的域名和类型键属性为MemoryManagerMXBean
。static final String
MemoryMXBean
的ObjectName
的字符串表示。static final String
ObjectName
中的域名和类型键属性为MemoryPoolMXBean
。static final String
OperatingSystemMXBean
的ObjectName
的字符串表示。static final String
RuntimeMXBean
的ObjectName
的字符串表示。static final String
ThreadMXBean
的ObjectName
的字符串表示。 -
方法总结
修饰符和类型方法描述static ClassLoadingMXBean
返回 Java 虚拟机的类加载系统的托管 bean。static CompilationMXBean
返回 Java 虚拟机编译系统的托管 bean。static List<GarbageCollectorMXBean>
返回 Java 虚拟机中的GarbageCollectorMXBean
对象列表。static List<MemoryManagerMXBean>
返回 Java 虚拟机中的MemoryManagerMXBean
对象列表。static MemoryMXBean
返回 Java 虚拟机内存系统的托管 bean。static List<MemoryPoolMXBean>
返回 Java 虚拟机中的MemoryPoolMXBean
对象列表。static OperatingSystemMXBean
返回运行 Java 虚拟机的操作系统的托管 bean。static Set<Class<? extends PlatformManagedObject>>
返回Class
对象的集合,PlatformManagedObject
的子接口,代表用于监视和管理 Java 平台的所有管理接口。static MBeanServer
返回平台MBeanServer
。static <T extends PlatformManagedObject>
TgetPlatformMXBean
(Class<T> mxbeanInterface) 返回实现给定mxbeanInterface
的平台 MXBean,它被指定为在 Java 虚拟机中具有一个实例。static <T extends PlatformManagedObject>
TgetPlatformMXBean
(MBeanServerConnection connection, Class<T> mxbeanInterface) 返回mxbeanInterface
的平台 MXBean 代理,它被指定为在 Java 虚拟机中有一个实例,代理将通过给定的MBeanServerConnection
转发方法调用。static <T extends PlatformManagedObject>
List<T>getPlatformMXBeans
(Class<T> mxbeanInterface) 返回在 Java 虚拟机中实现给定mxbeanInterface
的平台 MXBeans 列表。static <T extends PlatformManagedObject>
List<T>getPlatformMXBeans
(MBeanServerConnection connection, Class<T> mxbeanInterface) 返回平台 MXBean 代理的列表,用于通过给定的MBeanServerConnection
转发mxbeanInterface
的方法调用。static RuntimeMXBean
返回 Java 虚拟机运行时系统的托管 bean。static ThreadMXBean
返回 Java 虚拟机线程系统的托管 bean。static <T> T
newPlatformMXBeanProxy
(MBeanServerConnection connection, String mxbeanName, Class<T> mxbeanInterface) 返回给定 MXBean 名称 的平台 MXBean 接口的代理,该接口通过给定MBeanServerConnection
转发其方法调用。
-
字段详细信息
-
CLASS_LOADING_MXBEAN_NAME
ClassLoadingMXBean
的ObjectName
的字符串表示。- 参见:
-
COMPILATION_MXBEAN_NAME
CompilationMXBean
的ObjectName
的字符串表示。- 参见:
-
MEMORY_MXBEAN_NAME
MemoryMXBean
的ObjectName
的字符串表示。- 参见:
-
OPERATING_SYSTEM_MXBEAN_NAME
OperatingSystemMXBean
的ObjectName
的字符串表示。- 参见:
-
RUNTIME_MXBEAN_NAME
RuntimeMXBean
的ObjectName
的字符串表示。- 参见:
-
THREAD_MXBEAN_NAME
ThreadMXBean
的ObjectName
的字符串表示。- 参见:
-
GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE
GarbageCollectorMXBean
的ObjectName
中的域名和类型键属性。GarbageCollectorMXBean
的唯一ObjectName
可以通过在该字符串后附加“,name=
收集器的名称".- 参见:
-
MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE
ObjectName
中的域名和类型键属性为MemoryManagerMXBean
。MemoryManagerMXBean
的唯一ObjectName
可以通过在该字符串后附加“,name=
管理者的名称".- 参见:
-
MEMORY_POOL_MXBEAN_DOMAIN_TYPE
ObjectName
中的域名和类型键属性为MemoryPoolMXBean
。MemoryPoolMXBean
的唯一ObjectName
可以通过将此字符串附加到,name=
来形成游泳池的名字.- 参见:
-
-
方法详情
-
getClassLoadingMXBean
返回 Java 虚拟机的类加载系统的托管 bean。- 返回:
-
Java 虚拟机的
ClassLoadingMXBean
对象。
-
getMemoryMXBean
返回 Java 虚拟机内存系统的托管 bean。- 返回:
-
Java 虚拟机的
MemoryMXBean
对象。
-
getThreadMXBean
返回 Java 虚拟机线程系统的托管 bean。- 返回:
-
Java 虚拟机的
ThreadMXBean
对象。
-
getRuntimeMXBean
返回 Java 虚拟机运行时系统的托管 bean。- 返回:
-
Java 虚拟机的
RuntimeMXBean
对象。
-
getCompilationMXBean
返回 Java 虚拟机编译系统的托管 bean。如果Java虚拟机没有编译系统,这个方法返回null
。- 返回:
-
Java 虚拟机的
CompilationMXBean
对象或null
如果 Java 虚拟机没有编译系统。
-
getOperatingSystemMXBean
返回运行 Java 虚拟机的操作系统的托管 bean。- 返回:
-
Java 虚拟机的
OperatingSystemMXBean
对象。
-
getMemoryPoolMXBeans
返回 Java 虚拟机中的MemoryPoolMXBean
对象列表。 Java 虚拟机可以有一个或多个内存池。它可以在执行期间添加或删除内存池。- 返回:
MemoryPoolMXBean
对象列表。
-
getMemoryManagerMXBeans
返回 Java 虚拟机中的MemoryManagerMXBean
对象列表。 Java 虚拟机可以有一个或多个内存管理器。它可以在执行期间添加或删除内存管理器。- 返回:
MemoryManagerMXBean
对象列表。
-
getGarbageCollectorMXBeans
返回 Java 虚拟机中的GarbageCollectorMXBean
对象列表。 Java虚拟机可能有一个或多个GarbageCollectorMXBean
对象。它可能会在执行期间添加或删除GarbageCollectorMXBean
。- 返回:
GarbageCollectorMXBean
对象列表。
-
getPlatformMBeanServer
返回平台MBeanServer
。第一次调用此方法时,它首先通过调用MBeanServerFactory.createMBeanServer
方法创建平台MBeanServer
并使用其ObjectName
注册此平台MBeanServer
中的每个平台 MXBean。在后续调用中,此方法将简单地返回最初创建的平台MBeanServer
。动态创建和销毁的 MXBean,例如内存
pools
和managers
,将自动注册和注销到平台MBeanServer
中。如果设置了系统属性
javax.management.builder.initial
,则平台MBeanServer
创建将由指定的MBeanServerBuilder
完成。建议除了平台 MXBeans 之外,还使用此平台 MBeanServer 来注册其他应用程序管理的 bean。这将允许所有 MBean 通过相同的
MBeanServer
发布,从而允许更容易的网络发布和发现。应避免与平台 MXBeans 的名称冲突。- 返回:
-
平台
MBeanServer
;平台 MXBeans 在第一次调用此方法时注册到平台MBeanServer
中。 - 抛出:
SecurityException
- 如果存在安全管理器并且调用者没有MBeanServerFactory.createMBeanServer()
所需的权限。- 参见:
-
newPlatformMXBeanProxy
public static <T> T newPlatformMXBeanProxy(MBeanServerConnection connection, String mxbeanName, Class <T> mxbeanInterface) throws IOException 返回给定 MXBean 名称 的平台 MXBean 接口的代理,该接口通过给定MBeanServerConnection
转发其方法调用。此方法等效于:
Proxy.newProxyInstance
(mxbeanInterface.getClassLoader(), new Class[] { mxbeanInterface }, handler)
handler
是一个InvocationHandler
,对 MXBean 接口的方法调用被分派到该对象。此handler
在转发到MBeanServer
之前将输入参数从 MXBean 数据类型转换为其映射的开放类型,并将通过MBeanServer
的 MXBean 方法调用的返回值从开放类型转换为在 MXBean 接口中声明的相应返回类型。如果 MXBean 是通知发射器(即,它实现了
NotificationEmitter
),则mxbeanInterface
和NotificationEmitter
都将由此代理实现。笔记:
- 使用 MXBean 代理可以方便地远程访问正在运行的虚拟机的平台 MXBean。对 MXBean 代理的所有方法调用都转发到
MBeanServerConnection
,其中当连接器服务出现通信问题时可能抛出IOException
。如果抛出,IOException
将被包裹在UndeclaredThrowableException
中。使用代理远程访问平台 MXBeans 的应用程序应准备捕获UndeclaredThrowableException
并处理其 原因 ,就好像该原因已被MBeanServerConnection
接口抛出一样。 - 当客户端应用程序设计为远程访问 MXBean 以获取与应用程序运行版本不同的正在运行的虚拟机时,它应该准备捕获
InvalidObjectException
,当 MXBean 代理接收到枚举常量的名称时抛出该异常在客户端应用程序中加载的枚举类中丢失。如果抛出,InvalidObjectException
将被包裹在UndeclaredThrowableException
中。 MBeanServerInvocationHandler
或其newProxyInstance
方法不能用于为平台 MXBean 创建代理。MBeanServerInvocationHandler
创建的代理对象不处理 类规范 中描述的平台 MXBeans 的属性。
- 类型参数:
T
- 一个mxbeanInterface
类型参数- 参数:
connection
- 要转发到的MBeanServerConnection
。mxbeanName
-connection
中要转发到的平台 MXBean 的名称。mxbeanName
必须采用ObjectName
的格式。mxbeanInterface
- 代理要实现的 MXBean 接口。- 返回:
-
给定 MXBean 名称 的平台 MXBean 接口的代理,它通过给定的
MBeanServerConnection
或null
(如果不存在)转发其方法调用。 - 抛出:
IllegalArgumentException
- 如果mxbeanName
没有有效的ObjectName
格式,或者connection
中命名的 MXBean 不是平台提供的 MXBean,或者- 指定的 MXBean 未在
MBeanServerConnection
中注册,或者 - 命名的 MXBean 不是给定
mxbeanInterface
的实例
IOException
- 如果访问MBeanServerConnection
时出现通信问题。
- 使用 MXBean 代理可以方便地远程访问正在运行的虚拟机的平台 MXBean。对 MXBean 代理的所有方法调用都转发到
-
getPlatformMXBean
返回实现给定mxbeanInterface
的平台 MXBean,它被指定为在 Java 虚拟机中具有一个实例。如果管理接口没有在Java虚拟机中实现(例如没有编译系统的Java虚拟机不实现CompilationMXBean
),该方法可能返回null
;否则,此方法等同于调用:getPlatformMXBeans(mxbeanInterface)
.get(0);- 类型参数:
T
- 一个mxbeanInterface
类型参数- 参数:
mxbeanInterface
- 平台 MXBean 的管理接口,在 Java 虚拟机中具有一个实例(如果已实现)。- 返回:
-
实现
mxbeanInterface
的平台 MXBean,如果不存在,则为null
。 - 抛出:
IllegalArgumentException
- 如果mxbeanInterface
不是平台管理接口或不是单例平台 MXBean。- 自从:
- 1.7
-
getPlatformMXBeans
public static <T extends PlatformManagedObject > List <T> getPlatformMXBeans(Class <T> mxbeanInterface) 返回在 Java 虚拟机中实现给定mxbeanInterface
的平台 MXBeans 列表。返回的列表可能包含零个、一个或多个实例。返回列表中的实例数在给定管理接口的规范中定义。顺序未定义,无法保证返回的列表与之前调用的顺序相同。- 类型参数:
T
- 一个mxbeanInterface
类型参数- 参数:
mxbeanInterface
- 平台 MXBean 的管理接口- 返回:
-
实现
mxbeanInterface
的平台 MXBean 列表。 - 抛出:
IllegalArgumentException
- 如果mxbeanInterface
不是平台管理接口。- 自从:
- 1.7
-
getPlatformMXBean
public static <T extends PlatformManagedObject > T getPlatformMXBean(MBeanServerConnection connection, Class <T> mxbeanInterface) throws IOException 返回mxbeanInterface
的平台 MXBean 代理,它被指定为在 Java 虚拟机中有一个实例,代理将通过给定的MBeanServerConnection
转发方法调用。如果被监控的Java虚拟机没有实现管理接口,该方法可能返回null
(例如没有编译系统的Java虚拟机没有实现CompilationMXBean
);否则,此方法等同于调用:getPlatformMXBeans(connection, mxbeanInterface)
.get(0);- 类型参数:
T
- 一个mxbeanInterface
类型参数- 参数:
connection
- 要转发到的MBeanServerConnection
。mxbeanInterface
- 平台 MXBean 的管理接口,在被监视的 Java 虚拟机中具有一个实例(如果已实现)。- 返回:
-
平台 MXBean 代理,用于通过给定的
MBeanServerConnection
或null
(如果不存在)转发mxbeanInterface
的方法调用。 - 抛出:
IllegalArgumentException
- 如果mxbeanInterface
不是平台管理接口或不是单例平台 MXBean。IOException
- 如果访问MBeanServerConnection
时出现通信问题。- 自从:
- 1.7
- 参见:
-
getPlatformMXBeans
public static <T extends PlatformManagedObject > List <T> getPlatformMXBeans(MBeanServerConnection connection, Class <T> mxbeanInterface) throws IOException 返回平台 MXBean 代理的列表,用于通过给定的MBeanServerConnection
转发mxbeanInterface
的方法调用。返回的列表可能包含零个、一个或多个实例。返回列表中的实例数在给定管理接口的规范中定义。顺序未定义,无法保证返回的列表与之前调用的顺序相同。- 类型参数:
T
- 一个mxbeanInterface
类型参数- 参数:
connection
- 要转发到的MBeanServerConnection
。mxbeanInterface
- 平台 MXBean 的管理接口- 返回:
-
平台 MXBean 代理列表,用于通过给定的
MBeanServerConnection
转发mxbeanInterface
的方法调用。 - 抛出:
IllegalArgumentException
- 如果mxbeanInterface
不是平台管理接口。IOException
- 如果访问MBeanServerConnection
时出现通信问题。- 自从:
- 1.7
- 参见:
-
getPlatformManagementInterfaces
返回Class
对象的集合,PlatformManagedObject
的子接口,代表用于监视和管理 Java 平台的所有管理接口。- 返回:
Class
对象集,PlatformManagedObject
的子接口代表用于监视和管理 Java 平台的管理接口。- 自从:
- 1.7
-