包 java.lang.management
平台 MXBean
平台 MXBean 是托管bean符合 JMX Instrumentation Specification 并且仅使用一组基本数据类型。每个平台 MXBean 都是一个 PlatformManagedObject
和一个唯一的 name 。
ManagementFactory
ManagementFactory
类是Java 平台的管理工厂类。该类提供了一组静态工厂方法来获取Java平台的MXBean,允许应用程序直接访问MXBean。
可以使用 getPlatformMBeanServer
方法访问 platform MBeanServer。第一次调用此方法时,它会创建平台 MBeanServer 并注册所有平台 MXBeans,包括 平台 MXBeans 。每个平台 MXBean 都使用管理接口规范中定义的唯一名称进行注册。这是一个单一的 MBeanServer,可以由在同一 Java 虚拟机中运行的不同托管组件共享。
互操作性
管理应用程序和正在运行的虚拟机的平台 MBeanServer 可以互操作,而无需平台 MXBean 接口使用的类。在 JMX 连接器服务和连接器客户端之间传输的数据类型是 JMX 开放类型,这允许跨版本互操作。当通过 MBeanServer 接口访问时,MXBean 接口使用的数据类型映射到开放类型。有关详细信息,请参阅 MXBean 规范。
访问MXBean 的方法
应用程序可以通过以下方式监视 Java 虚拟机和运行时的检测:
1.直接访问一个MXBean接口
- 在正在运行的 Java 虚拟机本地获取一个 MXBean 实例:
RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean(); // Get the standard attribute "VmVendor" String vendor = mxbean.getVmVendor();
或者通过调用
getPlatformMXBean
或getPlatformMXBeans
方法:RuntimeMXBean mxbean = ManagementFactory.getPlatformMXBean(RuntimeMXBean.class); // Get the standard attribute "VmVendor" String vendor = mxbean.getVmVendor();
- 构造一个 MXBean 代理实例,将方法调用转发给给定的 MBeanServer:
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
在本地访问 MXBeans 或通过特定的MBeanServerConnection
远程访问 MXBeans。 MXBean 的属性和操作仅使用 JMX open types,其中包括基本数据类型、CompositeData
和OpenType
中定义的TabularData
。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 ... }
平台扩展
Java 虚拟机实现可以通过定义平台相关接口将其平台扩展添加到管理接口,这些接口扩展标准管理接口以包括特定于平台的指标和管理操作。 ManagementFactory
类中的静态工厂方法将返回具有平台扩展的 MXBeans。
建议使用特定于供应商的前缀(例如供应商名称)来命名特定于平台的属性,以避免未来对标准管理接口的扩展与平台扩展之间的属性名称冲突。如果未来对标准管理接口的扩展为管理接口定义了一个新属性,并且该属性名称恰好与某些供应商特定属性的名称相同,则必须修改访问该供应商特定属性的应用程序以应对版本控制和兼容性问题。
下面是一个示例,显示如何从平台扩展访问属性:
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
通过proxy访问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
- 参见:
-
类描述Java虚拟机类加载系统的管理接口。Java虚拟机编译系统的管理接口。Java虚拟机垃圾回收的管理接口。有关 lock 的信息。
ManagementFactory
类是为 Java 平台获取托管 bean 的工厂类。当与 SecurityManager 一起运行的代码调用在 Java 平台的管理接口中定义的方法时,SecurityManager 将检查的权限。内存管理器的管理接口。Java 虚拟机内存系统的管理接口。有关内存通知的信息。内存池的管理接口。memory pools
的类型。MemoryUsage
对象表示内存使用情况的快照。有关对象监视器锁的信息。运行 Java 虚拟机的操作系统的管理接口。记录 设施的管理界面。平台管理对象是一个JMX MXBean,用于监视和管理 Java 平台中的组件。Java 虚拟机运行时系统的管理接口。线程信息。Java虚拟机线程系统的管理接口。