Module  java.management

Package java.lang.management

提供用于监视和管理Java虚拟机和Java运行时中其他组件的管理界面。 它允许本地和远程监视和管理正在运行的Java虚拟机。

Platform MXBean

平台MXBean是符合JMX仪器规范的托管bean ,仅使用一组基本数据类型。 每个平台MXBean是一个PlatformManagedObject具有独特的name

ManagementFactory

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

可以使用getPlatformMBeanServer方法访问平台MBeanServer 在首次调用此方法时,它将创建平台MBeanServer并注册所有平台MXBeans,包括platform MXBeans 每个平台MXBean都使用管理界面规范中定义的唯一名称进行注册。 这是一个单独的MBeanServer,可以在同一个Java虚拟机中运行的不同托管组件共享。

互通性

运行虚拟机的管理应用程序和平台MBeanServer可以互操作,而不需要平台MXBean接口使用的类。 在JMX连接器服务器和连接器客户端之间传输的数据类型是JMX open types ,这允许跨版本进行互操作。 当通过MBeanServer接口访问时,MXBean接口使用的数据类型将映射到打开类型。 有关详细信息,请参阅MXBean规范。

Ways to Access MXBeans

应用程序可以通过以下方式监视Java虚拟机和运行时的工具:

1.直接访问MXBean界面

  • 在运行的Java虚拟机中本地获取MXBean实例:
      RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean();
    
       // Get the standard attribute "VmVendor"
       String vendor = mxbean.getVmVendor(); 

    或者通过调用getPlatformMXBeangetPlatformMXBeans方法:

      RuntimeMXBean mxbean = ManagementFactory.getPlatformMXBean(RuntimeMXBean.class);
    
       // Get the standard attribute "VmVendor"
       String vendor = mxbean.getVmVendor(); 
  • 构造一个将方法调用转发给给定的MBeanServer的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.getPlatformMXBean(mbs,
                                               RuntimeMXBean.class);
       // Get standard attribute "VmVendor"
       String vendor = proxy.getVmVendor(); 

    代理通常用于访问远程Java虚拟机中的MXBean。 创建MXBean代理的另一种方法是:

      RuntimeMXBean proxy =
           ManagementFactory.newPlatformMXBeanProxy(mbs,
                                                    ManagementFactory.RUNTIME_MXBEAN_NAME,
                                                    RuntimeMXBean.class); 

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

  • 通过platform MBeanServer访问本地的MBeanServerConnection或特定的MBeanServerConnection以远程访问MBeanServerConnection MXBean的属性和操作仅使用JMX打开类型 ,其中包括OpenType定义的基本数据类型CompositeDataTabularData
      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
           ...
       } 

Platform Extension

Java虚拟机实现可以通过定义依赖于平台的接口将其平台扩展添加到管理接口,扩展标准管理接口以包括平台特定的度量和管理操作。 ManagementFactory类中的静态工厂方法将返回具有平台扩展名的ManagementFactory

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

以下是展示如何从平台扩展程序访问属性的示例:

1)直接访问Oracle特定的MXBean界面

   List<com.sun.management.GarbageCollectorMXBean> mxbeans =
       ManagementFactory.getPlatformMXBeans(com.sun.management.GarbageCollectorMXBean.class);

   for (com.sun.management.GarbageCollectorMXBean gc : mxbeans) {
       // Get the standard attribute "CollectionCount"
       String count = mxbean.getCollectionCount();

       // Get the platform-specific attribute "LastGcInfo"
       GcInfo gcinfo = gc.getLastGcInfo();
       ...
   }

2)通过代理通过MBeanServer访问Oracle特定的MXBean接口

   MBeanServerConnection mbs;

   // Connect to a running JVM (or itself) and get MBeanServerConnection
   // that has the JVM MXBeans registered in it
   ...

   List<com.sun.management.GarbageCollectorMXBean> mxbeans =
       ManagementFactory.getPlatformMXBeans(mbs, com.sun.management.GarbageCollectorMXBean.class);

   for (com.sun.management.GarbageCollectorMXBean gc : mxbeans) {
       // Get the standard attribute "CollectionCount"
       String count = mxbean.getCollectionCount();

       // Get the platform-specific attribute "LastGcInfo"
       GcInfo gcinfo = gc.getLastGcInfo();
       ...
   }

除非另有说明,否则将null参数传递给此程序包中任何类或接口中的构造函数或方法将导致抛出NullPointerException

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

从以下版本开始:
1.5