请输入您要查询的百科知识:

 

词条 java.lang.management
释义

软件包 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。它同时允许从本地和远程对正在运行的 Java 虚拟机进行监视和管理。

描述

ClassLoadingMXBean Java 虚拟机的类加载系统。

CompilationMXBean Java 虚拟机的编译系统。

MemoryMXBean Java 虚拟机的内存系统。

ThreadMXBean Java 虚拟机的线程系统。

RuntimeMXBean Java 虚拟机的运行时系统。

OperatingSystemMXBean Java 虚拟机在其上运行的操作系统。

GarbageCollectorMXBean Java 虚拟机中的垃圾回收器。

MemoryManagerMXBean Java 虚拟机中的内存管理器。

MemoryPoolMXBean Java 虚拟机中的内存池。

平台 MXBean 是一种托管 Bean,它定义平台一个组件的管理接口,在 ManagementFactory 类中定义。

特征

应用程序可以采用以下方式监视 Java 虚拟机的监测和管理特定的特征:

直接访问 MXBean 接口

通过静态工厂方法获得 MXBean 实例,从本地访问正在运行的虚拟机的 MXBean 接口。

构造 MXBean 代理实例,通过调用 ManagementFactory.newPlatformMXBeanProxy 将方法调用转发到给定的 MBeanServer。代理通常构造为远程访问另一个正在运行的虚拟机的 MXBean。

通过 MBeanServer 接口间接访问

通过 platform MBeanServer 从本地访问 MXBean 或通过特定的 MBeanServerConnection 远程访问 MXBean。MXBean 的属性和操作仅使用 JMX 开放类型,包括在 OpenType 中的定义的基本数据类型、CompositeData 和 TabularData。

以下给出了一些采用不同方式访问 MXBean 的示例。

ManagementFactory

ManagementFactory 类是 Java 平台的管理工厂类。此类提供了一组静态工厂方法,用以获得 Java 平台的 MXBean,从而允许应用程序直接访问 MXBean。

使用 getPlatformMBeanServer 方法可以访问平台 MBeanServer。第一次调用此方法时,它将创建平台 MBeanServer 并注册所有的平台 MXBean,包括在其他包(如 LoggingMXBean)中定义的平台 MXBean。每个平台 MXBean 均使用用于构造 ObjectName 的 ManagementFactory 类中定义的惟一名称进行注册。这是惟一可以由在相同 Java 虚拟机内运行的不同托管组件共享的 MBeanServer。

互操作性

管理应用程序和正在运行的虚拟机的平台 MBeanServer 可以进行互操作,而无需平台 MXBean 接口使用的类。JMX 连接器服务器和连接器客户端之间传送的数据类型为 JMX 开放类型,这就允许跨版本的互操作。

当通过 MBeanServer 接口进行访问时,MXBean 接口使用的数据类型将映射为开放类型。数据类型映射在 ManagementFactory 类中指定。

访问 MXBean 的方法

有三种访问管理接口的方法。

直接调用同一 Java 虚拟机内的 MXBean 中的方法。

RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean();

// Get the standard attribute "VmVendor"

String vendor = mxbean.getVmVendor();

通过一个连接到正在运行的虚拟机的平台 MBeanServer 的 MBeanServerConnection。

MBeanServerConnection mbs;

// Connect to a running JVM (or itself) and get MBeanServerConnection

// that has the JVM MXBeans registered in it

...

try {

// Assuming the RuntimeMXBean has been registered in mbs

ObjectName oname = new ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME);

// Get standard attribute "VmVendor"

String vendor = (String) mbs.getAttribute(oname, "VmVendor");

} catch (....) {

// Catch the exceptions thrown by ObjectName constructor

// and MBeanServer.getAttribute method

...

}

使用 MXBean 代理。

MBeanServerConnection mbs;

// Connect to a running JVM (or itself) and get MBeanServerConnection

// that has the JVM MBeans registered in it

...

// Get a MBean proxy for RuntimeMXBean interface

RuntimeMXBean proxy =

ManagementFactory.newPlatformMXBeanProxy(mbs,

ManagementFactory.RUNTIME_MXBEAN_NAME,

RuntimeMXBean.class);

// Get standard attribute "VmVendor"

String vendor = proxy.getVmVendor();

平台扩展

Java 虚拟机实现通过定义与平台有关的接口(它扩展了标准管理接口,以包括特定于平台的规格和管理操作),可以将其平台扩展添加到管理接口。ManagementFactory 类中的静态工厂方法将返回具有平台扩展的 MBean。

建议使用特定于供应商的前缀(如供应商的名称)对特定于平台的属性进行命名,以避免标准管理接口的未来扩展与平台扩展之间的属性名称冲突。如果标准管理接口的未来扩展为管理接口定义了一个新属性,而该属性名称碰巧与某个特定于供应商的属性的名称相同,则必须修改访问该特定于供应商的属性的应用程序,以处理版本控制和兼容性问题。

以下示例演示了如何访问 Sun 的 RuntimeMXBean 实现中的特定于平台的属性。

1) 直接访问特定于 Sun 的 MXBean 接口

com.sun.management.RuntimeMXBean mxbean =

(com.sun.management.RuntimeMXBean) ManagementFactory.getRuntimeMXBean();

// Get the standard attribute "VmVendor"

String vendor = mxbean.getVmVendor();

// Get the platform-specific attribute "Bar"

BarType bar = mxbean.getBar();

2) 通过 MBeanServer 访问特定于 Sun 的 MXBean 接口

MBeanServerConnection mbs;

// Connect to a running JVM (or itself) and get MBeanServerConnection

// that has the JVM MXBeans registered in it

...

try {

// Assuming the RuntimeMXBean has been registered in mbs

ObjectName oname = new ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME);

// Get standard attribute "VmVendor"

String vendor = (String) mbs.getAttribute(oname, "VmVendor");

// Check if this MXBean contains Sun's extension

if (mbs.isInstanceOf(oname, "com.sun.management.RuntimeMXBean")) {

// Get platform-specific attribute "Bar"

BarType bar = (String) mbs.getAttribute(oname, "Bar");

}

} catch (....) {

// Catch the exceptions thrown by ObjectName constructor

// and MBeanServer methods

...

}

除非另有说明,向此包的任何类或接口中的构造方法或方法传递 null 变量,将会抛出 NullPointerException。

从以下版本开始:

1.5

另请参见:

JMX Specification.

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/2/7 16:43:20