请参见:
描述
接口摘要 | |
---|---|
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 虚拟机以及 Java 虚拟机在其上运行的操作系统。它同时允许从本地和远程对正在运行的 Java 虚拟机进行监视和管理。
管理接口
描述
ClassLoadingMXBean
Java 虚拟机的类加载系统。 CompilationMXBean
Java 虚拟机的编译系统。 MemoryMXBean
Java 虚拟机的内存系统。 ThreadMXBean
Java 虚拟机的线程系统。 RuntimeMXBean
Java 虚拟机的运行时系统。 OperatingSystemMXBean
Java 虚拟机在其上运行的操作系统。 GarbageCollectorMXBean
Java 虚拟机中的垃圾回收器。 MemoryManagerMXBean
Java 虚拟机中的内存管理器。 MemoryPoolMXBean
Java 虚拟机中的内存池。
平台 MXBean 是一种管理 Bean,它定义平台一个组件的管理接口,在 ManagementFactory 类中定义。
应用程序可以采用以下方式监视 Java 虚拟机的监测和管理特定的特征:
ManagementFactory.newPlatformMXBeanProxy
将方法调用转发到给定的 MBeanServer
。代理通常构造为远程访问另一个正在运行的虚拟机的 MXBean。MBeanServer
接口间接访问
platform MBeanServer
从本地访问 MXBean 或通过特定的 MBeanServerConnection 远程访问 MXBean。MXBean 的属性和操作仅使用 JMX 开放类型,包括在 OpenType
中的定义的基本数据类型、CompositeData
和 TabularData
。 ManagementFactory
类是 Java 平台的管理工厂类。此类提供了一组静态工厂方法,用以获得 Java 平台的 MXBean,从而允许应用程序直接访问 MXBean。
使用 getPlatformMBeanServer
方法可以访问平台 MBeanServer。第一次调用此方法时,它将创建平台 MBeanServer 并注册所有的平台 MXBean,包括在其他包(如 LoggingMXBean
)中定义的平台 MXBean。每个平台 MXBean 均使用用于构造 ObjectName
的 ManagementFactory
类中定义的唯一名称进行注册。这是唯一可以由在相同 Java 虚拟机内运行的不同管理组件共享的 MBeanServer。
开放类型
,这就允许跨版本的互操作。
当通过 MBeanServer 接口进行访问时,MXBean 接口使用的数据类型将映射为开放类型。数据类型映射在 ManagementFactory
类中指定。
RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean(); // Get the standard attribute "VmVendor" String vendor = mxbean.getVmVendor();
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 ... }
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();
建议使用特定于供应商的前缀(如供应商的名称)对特定于平台的属性进行命名,以避免标准管理接口的未来扩展与平台扩展之间的属性名称冲突。如果标准管理接口的未来扩展为管理接口定义了一个新属性,而该属性名称碰巧与某个特定于供应商的属性的名称相同,则必须修改访问该特定于供应商的属性的应用程序,以处理版本控制和兼容性问题。
以下示例演示了如何访问 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 是线程安全的。