java.lang.management

接口
异常
java.lang.Object
  继承者 java.lang.management.ManagementFactory

public class ManagementFactory
     
extends Object

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

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

  • 直接访问 MXBean 接口
    1. 通过静态工厂方法获取 MXBean 实例,从本地访问正在运行的虚拟机的 MXBean。
    2. 构造一个 MXBean 代理实例,以通过调用 newPlatfromMXBeanProxy 将方法调用转发到给定的 MBeanServer。构造代理通常是为了远程访问另一个正在运行的虚拟机的 MXBean。
  • 通过 MBeanServer 间接地访问 MXBean 接口
    1. 通过平台 MBeanServer 本地访问 MXBean 或通过特定的 MBeanServerConnection 远程访问 MXBean。MXBean 的属性和操作仅使用 JMX 开放类型,包括在 OpenType 中定义的基本数据类型 CompositeDataTabularData。映射关系在下面指定。

平台 MXBean

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

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

  • 基本类型,如 intlongboolean 等等
  • 基本类型的包装器类(如 IntegerLongBoolean 等等)和 String
  • Enum
  • 仅定义获取方法和具有 CompositeData 参数的静态 from 方法的类,以便将输入的 CompositeData 转换为该类的实例
  • List<E> 其中 E 为基本类型、包装类、枚举类或支持从 CompositeData 转换到此类的类
  • Map<K,V> 其中 KV 为基本类型、包装类、枚举类或支持从 CompositeData 转换到此类的类

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

  • 基本类型或包装器类映射到相同的类型。
  • Enum 映射到 String(其值为枚举常数的名称)。
  • 仅定义获取方法和具有 CompositeData 参数的 from 方法的类映射到 CompositeData
  • Map<K,V> 映射到 TabularData,后者的行类型为 CompositeType,此类型具有两个项,其名称分别为 "key""value",项类型分别为 KV 对应的映射类型,"key" 为索引。
  • List<E> 映射到数组,该数组中的元素类型为 E 的映射类型。
  • 元素类型为 E 的数组映射到具有相同维数的数组,该数组的元素类型为 E 的映射类型。
平台 MXBean 的 MBeanInfo 将属性和操作的数据类型描述为上述指定要映射到的基本类型或开放类型。

例如,MemoryMXBean 接口具有以下获取和设置方法:

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

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, MXBean

字段摘要
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 时出现通信问题。