JavaTM 2 Platform
Standard Ed. 5.0

java.lang.management
类 ManagementFactory

java.lang.Object
  继承者 java.lang.management.ManagementFactory

public class ManagementFactory
extends Object

ManagementFactory 类是一种工厂类,用于获取 Java 平台的托管 Bean。此类由静态方法组成,每种静态方法都会返回一个或多个表示 Java 虚拟机组件的管理接口的平台 MXBean

应用程序可以采用以下方式访问平台 MXBean:

平台 MXBean

平台 MXBean 是一种托管 Bean,它符合 JMX Instrumentation Specification,仅使用以下所描述的一组基本数据类型。JMX 管理应用程序和平台 MBeanServer 可以进行互操作,而无需 MXBean 特定数据类型的类。JMX 连接器服务器和连接器客户机之间传送的数据类型为开放类型,而这就允许不同版本进行互操作。

平台 MXBean 接口仅使用以下数据类型:

当通过 MBeanServer 访问平台 MXBean 的属性或操作时,将按以下方式对数据类型进行映射:

平台 MXBean 的 MBeanInfo 将属性和操作的数据类型描述为上述指定要映射到的基本类型或开放类型。

例如,MemoryMXBean 接口具有以下 gettersetter 方法:

 public MemoryUsage getHeapMemoryUsage();
 public boolean isVerbose();
 public void setVerbose(boolean value);
 
MemoryMXBeanMBeanInfo 中的这些属性的名称和类型如下:
属性名称 类型
HeapMemoryUsage CompositeData representing MemoryUsage
Verbose boolean

实现注意事项:

上面指定的映射可以在每个平台 MXBean 的实现中完成。一个不错的实现选择就是将 MXBean 作为动态 MBean 实现。

MXBean 名称

Java 虚拟机的每个平台 MXBean 都具有惟一的 ObjectName,以在平台 MBeanServer 中注册。Java 虚拟机具有以下管理接口的单一实例:
管理接口 对象名称
ClassLoadingMXBean java.lang:type=ClassLoading
MemoryMXBean java.lang:type=Memory
ThreadMXBean java.lang:type=Threading
RuntimeMXBean java.lang:type=Runtime
OperatingSystemMXBean java.lang:type=OperatingSystem

Java 虚拟机具有以下管理接口的零个或一个实例:

管理接口 对象名称
CompilationMXBean java.lang:type=Compilation

Java 虚拟机可能具有以下管理接口的一个或多个实例。

管理接口 对象名称
GarbageCollectorMXBean java.lang:type=GarbageCollector,name=collector's name
MemoryManagerMXBean java.lang:type=MemoryManager,name=manager's name
MemoryPoolMXBean java.lang:type=MemoryPool,name=pool's name

从以下版本开始:
1.5
另请参见:
JMX Specification., Access Management Metrics, LoggingMXBean

字段摘要
static String CLASS_LOADING_MXBEAN_NAME
          ClassLoadingMXBeanObjectName 的字符串表示形式。
static String COMPILATION_MXBEAN_NAME
          CompilationMXBeanObjectName 的字符串表示形式。
static String GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE
          GarbageCollectorMXBeanObjectName 中的域名和类型键属性。
static String MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE
          MemoryManagerMXBeanObjectName 中的域名和类型键属性。
static String MEMORY_MXBEAN_NAME
          MemoryMXBeanObjectName 的字符串表示形式。
static String MEMORY_POOL_MXBEAN_DOMAIN_TYPE
          MemoryPoolMXBeanObjectName 中的域名和类型键属性。
static String OPERATING_SYSTEM_MXBEAN_NAME
          OperatingSystemMXBeanObjectName 的字符串表示形式。
static String RUNTIME_MXBEAN_NAME
          RuntimeMXBeanObjectName 的表示形式。
static String THREAD_MXBEAN_NAME
          ThreadMXBeanObjectName 的字符串表示形式。
 
方法摘要
static ClassLoadingMXBean getClassLoadingMXBean()
          返回 Java 虚拟机的类加载系统的托管 Bean。
static CompilationMXBean getCompilationMXBean()
          返回 Java 虚拟机的编译系统的托管 Bean。
static List<GarbageCollectorMXBean> getGarbageCollectorMXBeans()
          返回 Java 虚拟机中的 GarbageCollectorMXBean 对象列表。
static List<MemoryManagerMXBean> getMemoryManagerMXBeans()
          返回 Java 虚拟机中的 MemoryManagerMXBean 对象列表。
static MemoryMXBean getMemoryMXBean()
          返回 Java 虚拟机的内存系统的托管 Bean。
static List<MemoryPoolMXBean> getMemoryPoolMXBeans()
          返回 Java 虚拟机中的 MemoryPoolMXBean 对象列表。
static OperatingSystemMXBean getOperatingSystemMXBean()
          返回运行 Java 虚拟机的操作系统的托管 Bean。
static MBeanServer getPlatformMBeanServer()
          返回平台 MBeanServer
static RuntimeMXBean getRuntimeMXBean()
          返回 Java 虚拟机的运行时系统的托管 Bean。
static ThreadMXBean getThreadMXBean()
          返回 Java 虚拟机的线程系统的托管 Bean。
static
<T> T
newPlatformMXBeanProxy(MBeanServerConnection connection, String mxbeanName, Class<T> mxbeanInterface)
          返回用于给定 MXBean 名称的平台 MXBean 接口的代理,以便通过给定 MBeanServerConnection 转发其方法调用。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

CLASS_LOADING_MXBEAN_NAME

public static final String CLASS_LOADING_MXBEAN_NAME
ClassLoadingMXBeanObjectName 的字符串表示形式。

另请参见:
常量字段值

COMPILATION_MXBEAN_NAME

public static final String COMPILATION_MXBEAN_NAME
CompilationMXBeanObjectName 的字符串表示形式。

另请参见:
常量字段值

MEMORY_MXBEAN_NAME

public static final String MEMORY_MXBEAN_NAME
MemoryMXBeanObjectName 的字符串表示形式。

另请参见:
常量字段值

OPERATING_SYSTEM_MXBEAN_NAME

public static final String OPERATING_SYSTEM_MXBEAN_NAME
OperatingSystemMXBeanObjectName 的字符串表示形式。

另请参见:
常量字段值

RUNTIME_MXBEAN_NAME

public static final String RUNTIME_MXBEAN_NAME
RuntimeMXBeanObjectName 的表示形式。

另请参见:
常量字段值

THREAD_MXBEAN_NAME

public static final String THREAD_MXBEAN_NAME
ThreadMXBeanObjectName 的字符串表示形式。

另请参见:
常量字段值

GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE

public static final String GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE
GarbageCollectorMXBeanObjectName 中的域名和类型键属性。GarbageCollectorMXBean 的惟一 ObjectName 可以通过在此字符串后附加 ",name=collector's name" 形成。

另请参见:
常量字段值

MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE

public static final String MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE
MemoryManagerMXBeanObjectName 中的域名和类型键属性。MemoryManagerMXBean 的惟一 ObjectName 可以通过在此字符串后附加 ",name=manager's name" 形成。

另请参见:
常量字段值

MEMORY_POOL_MXBEAN_DOMAIN_TYPE

public static final String MEMORY_POOL_MXBEAN_DOMAIN_TYPE
MemoryPoolMXBeanObjectName 中的域名和类型键属性。MemoryPoolMXBean 的惟一 ObjectName 可以通过在此字符串后附加 ",name=pool's name" 形成。

另请参见:
常量字段值
方法详细信息

getClassLoadingMXBean

public static ClassLoadingMXBean getClassLoadingMXBean()
返回 Java 虚拟机的类加载系统的托管 Bean。

返回:
Java 虚拟机的 ClassLoadingMXBean 对象。

getMemoryMXBean

public static MemoryMXBean getMemoryMXBean()
返回 Java 虚拟机的内存系统的托管 Bean。

返回:
Java 虚拟机的 MemoryMXBean 对象。

getThreadMXBean

public static ThreadMXBean getThreadMXBean()
返回 Java 虚拟机的线程系统的托管 Bean。

返回:
Java 虚拟机的 ThreadMXBean 对象。

getRuntimeMXBean

public static RuntimeMXBean getRuntimeMXBean()
返回 Java 虚拟机的运行时系统的托管 Bean。

返回:
Java 虚拟机的 RuntimeMXBean 对象。

getCompilationMXBean

public static CompilationMXBean getCompilationMXBean()
返回 Java 虚拟机的编译系统的托管 Bean。如果 Java 虚拟机没有编译系统,此方法将返回 null

返回:
Java 虚拟机的 CompilationMXBean 对象,或者,如果 Java 虚拟机没有编译系统,则返回 null

getOperatingSystemMXBean

public static OperatingSystemMXBean getOperatingSystemMXBean()
返回运行 Java 虚拟机的操作系统的托管 Bean。

返回:
Java 虚拟机的 OperatingSystemMXBean 对象。

getMemoryPoolMXBeans

public static List<MemoryPoolMXBean> getMemoryPoolMXBeans()
返回 Java 虚拟机中的 MemoryPoolMXBean 对象列表。Java 虚拟机可以有一个或多个内存池。可以在运行期间添加或删除内存池。

返回:
MemoryPoolMXBean 对象列表。

getMemoryManagerMXBeans

public static List<MemoryManagerMXBean> getMemoryManagerMXBeans()
返回 Java 虚拟机中的 MemoryManagerMXBean 对象列表。Java 虚拟机可以有一个或多个内存管理器。可以在运行期间添加或删除内存管理器。

返回:
MemoryManagerMXBean 对象列表。

getGarbageCollectorMXBeans

public static List<GarbageCollectorMXBean> getGarbageCollectorMXBeans()
返回 Java 虚拟机中的 GarbageCollectorMXBean 对象列表。Java 虚拟机可以有一个或多个 GarbageCollectorMXBean 对象。可以在运行期间添加或删除 GarbageCollectorMXBean

返回:
GarbageCollectorMXBean 对象列表。

getPlatformMBeanServer

public static MBeanServer getPlatformMBeanServer()
返回平台 MBeanServer。第一次调用此方法时,将首先通过调用 MBeanServerFactory.createMBeanServer() 方法创建平台 MBeanServer,然后通过使用类描述中定义的 MXBean 名称在此平台 MBeanServer 中注册平台 MXBean。在后续的调用中,此方法将直接返回最初创建的平台 MBeanServer

动态创建和销毁的 MXBean(如内存管理器)将自动注册到平台 MBeanServer 和从中注销。

如果设置了系统属性 javax.management.builder.initial,将由指定的 MBeanServerBuilder 进行平台 MBeanServer 创建。

建议也将此平台用于注册平台 MXBean 之外的其他应用程序托管 Bean。这将允许所有 MBean 通过同一个 MBeanServer 发布,从而能够更方便地进行网络发布和发现。应该避免平台 MXBean 的名称冲突。

返回:
平台 MBeanServer;将在第一次调用此方法时注册到平台 MBeanServer 中的平台 MXBean。
抛出:
SecurityException - 如果安全管理器和调用方不具有 MBeanServerFactory.createMBeanServer() 所需要的权限。
另请参见:
MBeanServerFactory, 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 会在将 MXBean 数据类型的输入参数转发到 MBeanServer 之前将其转换为其映射的开放类型,并将通过 MBeanServer 的 MXBean 方法调用的返回值由开放类型转换为在 MXBean 接口中声明的对应返回类型。

如果 MXBean 是通知发出者(即它实现了 NotificationEmitter),则 mxbeanInterfaceNotificationEmitter 都将由此代理实现。

注:

  1. 使用 MXBean 代理可以方便地远程访问正在运行的虚拟机的平台 MXBean。所有对 MXBean 代理的方法调用都被转发到 MBeanServerConnection,当连接器服务器出现通信问题时,可能在其中抛出 IOException。如果使用代理远程访问平台 MXBean 的应用程序要访问 MBeanServerConnector 接口,则应该准备捕获 IOException
  2. 当客户端应用程序设计为远程访问正在运行的虚拟机(其版本与该应用程序运行其上的虚拟机版本不同)的 MXBean 时,应当准备捕获 InvalidObjectException,当 MXBean 代理接收到一个枚举常数的名称,而该名称客户端应用程序中加载的枚举类又缺少此枚举常数时,将抛出此异常。
  3. MBeanServerInvocationHandler 或其 newProxyInstance 方法不能用于为平台 MXBean 创建代理。MBeanServerInvocationHandler 创建的代理对象不会处理类规范中描述的平台 MXBean 的属性。

参数:
connection - 要转发到的目标 MBeanServerConnection
mxbeanName - 要转发到的 connection 的平台 MXBean。mxbeanName 的格式必须为 ObjectName 的格式。
mxbeanInterface - 要由代理实现的 MXBean 接口。
抛出:
IllegalArgumentException - 如果
  • mxbeanName 没有采用有效的 ObjectName 格式,或者
  • connection 中指定的 MXBean 不是由平台提供的 MXBean,或者
  • 指定的 MXBean 未在 MBeanServerConnection 中注册,或者
  • 指定的 MXBean 不是给定 mxbeanInterface 的实例
IOException - 如果在访问 MBeanServerConnection 时出现通信问题。

JavaTM 2 Platform
Standard Ed. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策