Package java.lang.management
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();
或者通过调用
getPlatformMXBean
或getPlatformMXBeans
方法: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
中定义的基本数据类型CompositeData
和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 ... }
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
-
接口摘要 接口 描述 BufferPoolMXBean ClassLoadingMXBean Java虚拟机的类加载系统的管理界面。CompilationMXBean Java虚拟机编译系统的管理界面。GarbageCollectorMXBean 用于Java虚拟机垃圾收集的管理界面。MemoryManagerMXBean 内存管理器的管理界面。MemoryMXBean Java虚拟机的内存系统的管理界面。MemoryPoolMXBean 内存池的管理界面。OperatingSystemMXBean 运行Java虚拟机的操作系统的管理界面。PlatformLoggingMXBean logging设施的管理界面。PlatformManagedObject 平台管理对象是用于监视和管理Java平台中的组件的JMX MXBean 。RuntimeMXBean Java虚拟机的运行时系统的管理界面。ThreadMXBean Java虚拟机线程系统的管理界面。 -
类摘要 Class 描述 LockInfo 有关 锁的信息。ManagementFactory ManagementFactory
类是用于获取Java平台的托管Bean的工厂类。ManagementPermission 当SecurityManager运行的代码调用在Java平台的管理界面中定义的方法时,SecurityManager将检查的权限。MemoryNotificationInfo 有关内存通知的信息。MemoryUsage MemoryUsage
对象表示内存使用的快照。MonitorInfo 有关对象监视器锁的信息。ThreadInfo 线程信息。 -
枚举摘要 Enum 描述 MemoryType 类型memory pools
。