返回介绍

软件包 java.lang.management

发布于 2019-10-04 09:51:14 字数 8009 浏览 962 评论 0 收藏 0


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

请参见: 描述

 

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

 

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

 

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

 

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

平台 MXBean

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

管理接口

描述

ClassLoadingMXBeanJava 虚拟机的类加载系统。
CompilationMXBeanJava 虚拟机的编译系统。
MemoryMXBeanJava 虚拟机的内存系统。
ThreadMXBeanJava 虚拟机的线程系统。
RuntimeMXBeanJava 虚拟机的运行时系统。
OperatingSystemMXBeanJava 虚拟机在其上运行的操作系统。
GarbageCollectorMXBeanJava 虚拟机中的垃圾回收器。
MemoryManagerMXBeanJava 虚拟机中的内存管理器。
MemoryPoolMXBeanJava 虚拟机中的内存池。

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

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

  • 直接访问 MXBean 接口
    1. 通过静态工厂方法获得 MXBean 实例,从本地访问正在运行的虚拟机的 MXBean 接口。
    2. 构造 MXBean 代理实例,通过调用 ManagementFactory.newPlatformMXBeanProxy 将方法调用转发到给定的 MBeanServer 。代理通常构造为远程访问另一个正在运行的虚拟机的 MXBean。
  • 通过 MBeanServer 接口间接访问
    1. 通过 platform MBeanServer 从本地访问 MXBean 或通过特定的 MBeanServerConnection 远程访问 MXBean。MXBean 的属性和操作仅使用 JMX 开放类型,包括在 OpenType 中的定义的基本数据类型、 CompositeDataTabularData

以下给出了一些采用不同方式访问 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
   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
       ...
   }

    1. 使用 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.

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

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

发布评论

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