MXBean
MBean是一种JavaBean,MBean往往代表的是JMX中的一种可以被管理的资源。MBean会通过接口定义,给出这些资源的一些特定操作:
属性的读和写操作
可以被执行的操作
关于自己的描述信息
在Java 5以后,JVM 中内置了一些特殊的 MBean,称为系统 MXBean (Platform MXBean)。这些系统 MXBean 实时地收集 JVM 实例内存使用,线程调度,类装载等各种信息。JMX 客户端程序可以通过这些系统 MXBean 获取系统运行的状况。
JConsole是一个JMX的客户端程序。通过JConole,可以直观的观测指定 JVM 的运行情况,同时也可以连接到用户自定义的MBean和MXBean,获取需要的监控信息。
JAVA 平台MXBean: ClassLoadingMXBean 用于 Java 虚拟机的类加载系统的管理接口。 CompilationMXBean 用于 Java 虚拟机的编译系统的管理接口。 GarbageCollectorMXBean 用于 Java 虚拟机的垃圾回收的管理接口。 MemoryManagerMXBean 内存管理器的管理接口。 MemoryMXBean Java 虚拟机的内存系统的管理接口。 MemoryPoolMXBean 内存池的管理接口。 OperatingSystemMXBean 用于操作系统的管理接口,Java 虚拟机在此操作系统上运行。 RuntimeMXBean Java 虚拟机的运行时系统的管理接口。 ThreadMXBean Java 虚拟机线程系统的管理接口。
以下的例子,展示了如何使用java自身提供的MXBean来监控一个简单的java程序启动的过程中启动了哪些java线程
public class MXBeanDemo {
public static void main(String[] args) {
System.out.println("below is thread info:");
//获取Java线程管理MXBean
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
long[] threadIds = threadMXBean.getAllThreadIds();
ThreadInfo[] threadInfos = threadMXBean.getThreadInfo(threadIds);
//遍历线程信息,仅打印线程ID和线程名称信息
for (ThreadInfo threadInfo : threadInfos) {
System.out.println("["+threadInfo.getThreadId()+"]"+
threadInfo.getThreadName());
}
}
}
输出信息:
[5] Attach Listener //添加事件 [4] Signal Dispatcher // 分发处理给 JVM 信号的线程 [3] Finalizer //调⽤对象 finalize ⽅法的线程 [2] Reference Handler //清除 reference 线程 [1] main //main 线程,程序⼊⼝
从上面的输出内容可以看出:一个Java程序的运行是main线程和多个其他线程同时运行。