类 ManagementFactory

java.lang.Object
java.lang.management.ManagementFactory

public class ManagementFactory extends Object
ManagementFactory 类是为 Java 平台获取托管 bean 的工厂类。此类由静态方法组成,每个方法返回一个或多个平台 MXBeans表示 Java 虚拟机组件的管理接口。

平台 MXBean

平台 MXBean 是托管bean符合 JMX Instrumentation Specification 并且仅使用一组基本数据类型。 JMX 管理应用程序和 平台MBeanServer 可以互操作,而无需 MXBean 特定数据类型的类。在 JMX 连接器服务和连接器客户端之间传输的数据类型是开放类型,这允许跨版本互操作。有关详细信息,请参阅 MXBeans规范

每个平台 MXBean 都是一个 PlatformManagedObject ,它有一个唯一的 ObjectName 用于在平台 MBeanServer 中注册,由 getObjectName 方法返回。

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

1.直接访问一个MXBean接口

2. 通过 MBeanServer 间接访问 MXBean 接口

  • 通过平台 MBeanServer 在本地访问 MXBeans 或通过特定的 MBeanServerConnection 远程访问 MXBeans。 MXBean 的属性和操作仅使用 JMX open types,其中包括基本数据类型、CompositeData OpenType 中定义的 TabularData 。该map在 MXBean 规范中指定以获取详细信息。

getPlatformManagementInterfaces 方法返回 Java 虚拟机支持的所有管理接口,包括下表中列出的标准管理接口以及 JDK 实现扩展的管理接口。

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

管理接口列表及其单个实例
管理接口 ObjectName
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
PlatformLoggingMXBean java.util.logging:type=Logging

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
参见:
  • 字段详细信息

    • CLASS_LOADING_MXBEAN_NAME

      public static final String  CLASS_LOADING_MXBEAN_NAME
      ClassLoadingMXBean ObjectName 的字符串表示。
      参见:
    • COMPILATION_MXBEAN_NAME

      public static final String  COMPILATION_MXBEAN_NAME
      CompilationMXBean ObjectName 的字符串表示。
      参见:
    • MEMORY_MXBEAN_NAME

      public static final String  MEMORY_MXBEAN_NAME
      MemoryMXBean ObjectName 的字符串表示。
      参见:
    • OPERATING_SYSTEM_MXBEAN_NAME

      public static final String  OPERATING_SYSTEM_MXBEAN_NAME
      OperatingSystemMXBean ObjectName 的字符串表示。
      参见:
    • RUNTIME_MXBEAN_NAME

      public static final String  RUNTIME_MXBEAN_NAME
      RuntimeMXBean ObjectName 的字符串表示。
      参见:
    • THREAD_MXBEAN_NAME

      public static final String  THREAD_MXBEAN_NAME
      ThreadMXBean ObjectName 的字符串表示。
      参见:
    • GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE

      public static final String  GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE
      GarbageCollectorMXBean ObjectName 中的域名和类型键属性。 GarbageCollectorMXBean 的唯一ObjectName 可以通过在该字符串后附加“,name=收集器的名称".
      参见:
    • MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE

      public static final String  MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE
      ObjectName 中的域名和类型键属性为 MemoryManagerMXBean MemoryManagerMXBean 的唯一ObjectName 可以通过在该字符串后附加“,name=管理者的名称".
      参见:
    • MEMORY_POOL_MXBEAN_DOMAIN_TYPE

      public static final String  MEMORY_POOL_MXBEAN_DOMAIN_TYPE
      ObjectName 中的域名和类型键属性为 MemoryPoolMXBean MemoryPoolMXBean 的唯一 ObjectName 可以通过将此字符串附加到 ,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 对象或 null 如果 Java 虚拟机没有编译系统。
    • 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 并使用其 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 ),则 mxbeanInterfaceNotificationEmitter 都将由此代理实现。

      笔记:

      1. 使用 MXBean 代理可以方便地远程访问正在运行的虚拟机的平台 MXBean。对 MXBean 代理的所有方法调用都转发到 MBeanServerConnection,其中当连接器服务出现通信问题时可能抛出 IOException 。如果抛出,IOException 将被包裹在 UndeclaredThrowableException 中。使用代理远程访问平台 MXBeans 的应用程序应准备捕获 UndeclaredThrowableException 并处理其 原因 ,就好像该原因已被 MBeanServerConnection 接口抛出一样。
      2. 当客户端应用程序设计为远程访问 MXBean 以获取与应用程序运行版本不同的正在运行的虚拟机时,它应该准备捕获 InvalidObjectException ,当 MXBean 代理接收到枚举常量的名称时抛出该异常在客户端应用程序中加载的枚举类中丢失。如果抛出,InvalidObjectException 将被包裹在 UndeclaredThrowableException 中。
      3. MBeanServerInvocationHandler 或其 newProxyInstance 方法不能用于为平台 MXBean 创建代理。 MBeanServerInvocationHandler 创建的代理对象不处理 类规范 中描述的平台 MXBeans 的属性。
      类型参数:
      T - 一个 mxbeanInterface 类型参数
      参数:
      connection - 要转发到的 MBeanServerConnection
      mxbeanName - connection 中要转发到的平台 MXBean 的名称。 mxbeanName 必须采用 ObjectName 的格式。
      mxbeanInterface - 代理要实现的 MXBean 接口。
      返回:
      给定 MXBean 名称 的平台 MXBean 接口的代理,它通过给定的 MBeanServerConnectionnull(如果不存在)转发其方法调用。
      抛出:
      IllegalArgumentException - 如果
      • mxbeanName 没有有效的 ObjectName 格式,或者
      • connection 中命名的 MXBean 不是平台提供的 MXBean,或者
      • 指定的 MXBean 未在 MBeanServerConnection 中注册,或者
      • 命名的 MXBean 不是给定 mxbeanInterface 的实例
      IOException - 如果访问 MBeanServerConnection 时出现通信问题。
    • getPlatformMXBean

      public static <T extends PlatformManagedObject > T getPlatformMXBean(Class <T> mxbeanInterface)
      返回实现给定 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 代理,用于通过给定的 MBeanServerConnectionnull(如果不存在)转发 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

      public static Set <Class <? extends PlatformManagedObject >> getPlatformManagementInterfaces()
      返回 Class 对象的集合, PlatformManagedObject 的子接口,代表用于监视和管理 Java 平台的所有管理接口。
      返回:
      Class 对象集,PlatformManagedObject 的子接口代表用于监视和管理 Java 平台的管理接口。
      自从:
      1.7