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 StringClassLoadingMXBean的ObjectName的字符串表示。static final StringCompilationMXBean的ObjectName的字符串表示。static final StringGarbageCollectorMXBean的ObjectName中的域名和类型键属性。static final StringObjectName中的域名和类型键属性为MemoryManagerMXBean。static final StringMemoryMXBean的ObjectName的字符串表示。static final StringObjectName中的域名和类型键属性为MemoryPoolMXBean。static final StringOperatingSystemMXBean的ObjectName的字符串表示。static final StringRuntimeMXBean的ObjectName的字符串表示。static final StringThreadMXBean的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> TnewPlatformMXBeanProxy(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
-