|
|||||||||
软件包 java.lang.management
提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。请参见:
描述
接口摘要 | |
---|---|
ClassLoadingMXBean | 用于 Java 虚拟机的类加载系统的管理接口。 |
CompilationMXBean | 用于 Java 虚拟机的编译系统的管理接口。 |
GarbageCollectorMXBean | 用于 Java 虚拟机的垃圾回收的管理接口。 |
MemoryManagerMXBean | 内存管理器的管理接口。 |
MemoryMXBean | Java 虚拟机的内存系统的管理接口。 |
MemoryPoolMXBean | 内存池的管理接口。 |
OperatingSystemMXBean | 用于操作系统的管理接口,Java 虚拟机在此操作系统上运行。 |
RuntimeMXBean | Java 虚拟机的运行时系统的管理接口。 |
ThreadMXBean | Java 虚拟机线程系统的管理接口。 |
类摘要 | |
---|---|
ManagementFactory | ManagementFactory 类是一种工厂类,用于获取 Java 平台的托管 Bean。 |
ManagementPermission | 使用 SecurityManager 运行的代码调用 Java 平台的管理接口中定义的方法时,SecurityManager 将要检查的权限。 |
MemoryNotificationInfo | 关于内存通知的信息。 |
MemoryUsage | 表示内存使用量快照的 MemoryUsage 对象。 |
ThreadInfo | 线程信息。 |
枚举摘要 | |
---|---|
MemoryType | 内存池 的类型。 |
软件包 java.lang.management 的描述
提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。它同时允许从本地和远程对正在运行的 Java 虚拟机进行监视和管理。
平台 MXBean
此包定义以下组件的管理接口:
管理接口
描述
ClassLoadingMXBean
Java 虚拟机的类加载系统。 CompilationMXBean
Java 虚拟机的编译系统。 MemoryMXBean
Java 虚拟机的内存系统。 ThreadMXBean
Java 虚拟机的线程系统。 RuntimeMXBean
Java 虚拟机的运行时系统。 OperatingSystemMXBean
Java 虚拟机在其上运行的操作系统。 GarbageCollectorMXBean
Java 虚拟机中的垃圾回收器。 MemoryManagerMXBean
Java 虚拟机中的内存管理器。 MemoryPoolMXBean
Java 虚拟机中的内存池。
平台 MXBean 是一种托管 Bean,它定义平台一个组件的管理接口,在 ManagementFactory 类中定义。
应用程序可以采用以下方式监视 Java 虚拟机的监测和管理特定的特征:
- 直接访问 MXBean 接口
- 通过静态工厂方法获得 MXBean 实例,从本地访问正在运行的虚拟机的 MXBean 接口。
- 构造 MXBean 代理实例,通过调用
ManagementFactory.newPlatformMXBeanProxy
将方法调用转发到给定的MBeanServer
。代理通常构造为远程访问另一个正在运行的虚拟机的 MXBean。
- 通过
MBeanServer
接口间接访问- 通过
platform MBeanServer
从本地访问 MXBean 或通过特定的 MBeanServerConnection 远程访问 MXBean。MXBean 的属性和操作仅使用 JMX 开放类型,包括在OpenType
中的定义的基本数据类型、CompositeData
和TabularData
。
- 通过
ManagementFactory
ManagementFactory
类是 Java 平台的管理工厂类。此类提供了一组静态工厂方法,用以获得 Java 平台的 MXBean,从而允许应用程序直接访问 MXBean。
使用 getPlatformMBeanServer
方法可以访问平台 MBeanServer。第一次调用此方法时,它将创建平台 MBeanServer 并注册所有的平台 MXBean,包括在其他包(如 LoggingMXBean
)中定义的平台 MXBean。每个平台 MXBean 均使用用于构造 ObjectName
的 ManagementFactory
类中定义的惟一名称进行注册。这是惟一可以由在相同 Java 虚拟机内运行的不同托管组件共享的 MBeanServer。
互操作性
管理应用程序和正在运行的虚拟机的平台 MBeanServer 可以进行互操作,而无需平台 MXBean 接口使用的类。JMX 连接器服务器和连接器客户端之间传送的数据类型为 JMX开放类型
,这就允许跨版本的互操作。
当通过 MBeanServer 接口进行访问时,MXBean 接口使用的数据类型将映射为开放类型。数据类型映射在 ManagementFactory
类中指定。
访问 MXBean 的方法
有三种访问管理接口的方法。- 直接调用同一 Java 虚拟机内的 MXBean 中的方法。
RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean(); // Get the standard attribute "VmVendor" String vendor = mxbean.getVmVendor();
- 通过一个连接到正在运行的虚拟机的平台 MBeanServer 的 MBeanServerConnection。
- 使用 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"); } 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();
平台扩展
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.
所有类
|
|||||||||