返回介绍

java.lang.management 类 ManagementFactory

发布于 2019-10-04 09:51:13 字数 19432 浏览 1497 评论 0 收藏 0

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,仅使用以下所描述的一组基本数据类型。JMX 管理应用程序和平台 MBeanServer 可以进行互操作,而无需 MXBean 特定数据类型的类。JMX 连接器服务器和连接器客户机之间传送的数据类型为 开放类型 ,而这就允许不同版本进行互操作。

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

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

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

  • 基本类型或包装器类映射到相同的类型。
  • Enum 映射到 String (其值为枚举常数的名称)。
  • 仅定义 getter 方法和具有 CompositeData 参数的 from 方法的类映射到 CompositeData
  • Map<K,V> 映射到 TabularData ,后者的行类型为 CompositeType ,此类型具有两个项,其名称分别为 "key""value",项类型分别为 KV 对应的映射类型,"key" 为索引。
  • List<E> 映射到数组,该数组中的元素类型为 E 的映射类型。
  • 元素类型为 E 的数组映射到具有相同维数的数组,该数组的元素类型为 E 的映射类型。

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

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

 public MemoryUsage getHeapMemoryUsage();
 public boolean isVerbose();
 public void setVerbose(boolean value);

MemoryMXBeanMBeanInfo 中的这些属性的名称和类型如下:

属性名称类型
HeapMemoryUsageCompositeData representing MemoryUsage
Verboseboolean

实现注意事项:

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

MXBean 名称

Java 虚拟机的每个平台 MXBean 都具有惟一的 ObjectName ,以在平台 MBeanServer 中注册。Java 虚拟机具有以下管理接口的单一实例:

管理接口对象名称
ClassLoadingMXBeanjava.lang:type=ClassLoading
MemoryMXBeanjava.lang:type=Memory
ThreadMXBeanjava.lang:type=Threading
RuntimeMXBeanjava.lang:type=Runtime
OperatingSystemMXBeanjava.lang:type=OperatingSystem

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

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

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

管理接口对象名称
GarbageCollectorMXBeanjava.lang:type=GarbageCollector,name=collector's name
MemoryManagerMXBeanjava.lang:type=MemoryManager,name=manager's name
MemoryPoolMXBeanjava.lang:type=MemoryPool,name=pool's name
从以下版本开始:
1.5
另请参见:
JMX Specification., Access Management Metrics, LoggingMXBean

字段摘要
staticStringCLASS_LOADING_MXBEAN_NAME

ClassLoadingMXBeanObjectName 的字符串表示形式。

staticStringCOMPILATION_MXBEAN_NAME

CompilationMXBeanObjectName 的字符串表示形式。

staticStringGARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE

GarbageCollectorMXBeanObjectName 中的域名和类型键属性。

staticStringMEMORY_MANAGER_MXBEAN_DOMAIN_TYPE

MemoryManagerMXBeanObjectName 中的域名和类型键属性。

staticStringMEMORY_MXBEAN_NAME

MemoryMXBeanObjectName 的字符串表示形式。

staticStringMEMORY_POOL_MXBEAN_DOMAIN_TYPE

MemoryPoolMXBeanObjectName 中的域名和类型键属性。

staticStringOPERATING_SYSTEM_MXBEAN_NAME

OperatingSystemMXBeanObjectName 的字符串表示形式。

staticStringRUNTIME_MXBEAN_NAME

RuntimeMXBeanObjectName 的表示形式。

staticStringTHREAD_MXBEAN_NAME

ThreadMXBeanObjectName 的字符串表示形式。

方法摘要
staticClassLoadingMXBeangetClassLoadingMXBean()

返回 Java 虚拟机的类加载系统的托管 Bean。

staticCompilationMXBeangetCompilationMXBean()

返回 Java 虚拟机的编译系统的托管 Bean。

staticList<GarbageCollectorMXBean>getGarbageCollectorMXBeans()

返回 Java 虚拟机中的 GarbageCollectorMXBean 对象列表。

staticList<MemoryManagerMXBean>getMemoryManagerMXBeans()

返回 Java 虚拟机中的 MemoryManagerMXBean 对象列表。

staticMemoryMXBeangetMemoryMXBean()

返回 Java 虚拟机的内存系统的托管 Bean。

staticList<MemoryPoolMXBean>getMemoryPoolMXBeans()

返回 Java 虚拟机中的 MemoryPoolMXBean 对象列表。

staticOperatingSystemMXBeangetOperatingSystemMXBean()

返回运行 Java 虚拟机的操作系统的托管 Bean。

staticjavax.management.MBeanServergetPlatformMBeanServer()

返回平台 MBeanServer

staticRuntimeMXBeangetRuntimeMXBean()

返回 Java 虚拟机的运行时系统的托管 Bean。

staticThreadMXBeangetThreadMXBean()

返回 Java 虚拟机的线程系统的托管 Bean。

static
<T> T
newPlatformMXBeanProxy(javax.management.MBeanServerConnectionconnection, StringmxbeanName, 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 javax.management.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(javax.management.MBeanServerConnectionconnection,
                                           StringmxbeanName,
                                           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 时出现通信问题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文