JavaTM Platform
Standard Ed. 6

软件包 java.lang.management

提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。

请参见:
          描述

接口摘要
ClassLoadingMXBean 用于 Java 虚拟机的类加载系统的管理接口。
CompilationMXBean 用于 Java 虚拟机的编译系统的管理接口。
GarbageCollectorMXBean 用于 Java 虚拟机的垃圾回收的管理接口。
MemoryManagerMXBean 内存管理器的管理接口。
MemoryMXBean Java 虚拟机内存系统的管理接口。
MemoryPoolMXBean 内存池的管理接口。
OperatingSystemMXBean 用于操作系统的管理接口,Java 虚拟机在此操作系统上运行。
RuntimeMXBean Java 虚拟机的运行时系统的管理接口。
ThreadMXBean Java 虚拟机线程系统的管理接口。
 

类摘要
LockInfo 关于 的信息。
ManagementFactory ManagementFactory 类是一种工厂类,用于获取 Java 平台的管理 Bean。
ManagementPermission 使用 SecurityManager 运行的代码调用 Java 平台的管理接口中定义的方法时,SecurityManager 将要检查的权限。
MemoryNotificationInfo 关于内存通知的信息。
MemoryUsage 表示内存使用量快照的 MemoryUsage 对象。
MonitorInfo 关于对象监视器锁的信息。
ThreadInfo 线程信息。
 

枚举摘要
MemoryType 内存池的类型。
 

软件包 java.lang.management 的描述

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

平台 MXBean

此包定义以下组件的管理接口:

管理接口

描述

ClassLoadingMXBean Java 虚拟机的类加载系统。
CompilationMXBean Java 虚拟机的编译系统。
MemoryMXBean Java 虚拟机的内存系统。
ThreadMXBean Java 虚拟机的线程系统。
RuntimeMXBean Java 虚拟机的运行时系统。
OperatingSystemMXBean Java 虚拟机在其上运行的操作系统。
GarbageCollectorMXBean Java 虚拟机中的垃圾回收器。
MemoryManagerMXBean Java 虚拟机中的内存管理器。
MemoryPoolMXBean Java 虚拟机中的内存池。

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

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

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

ManagementFactory

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

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

互操作性

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

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

访问 MXBean 的方法

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

  1. 直接调用同一 Java 虚拟机内的 MXBean 中的方法。
       RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean();
    
       // Get the standard attribute "VmVendor"
       String vendor = mxbean.getVmVendor();
    
    
  2. 通过一个连接到正在运行的虚拟机的平台 MBeanServerMBeanServerConnection
  3.    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
           ...
       }
    
    
  4. 使用 MXBean 代理。
  5.    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

java.lang.management API 是线程安全的。

从以下版本开始:
1.5
另请参见:
JMX 规范。

JavaTM Platform
Standard Ed. 6

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

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