zoukankan      html  css  js  c++  java
  • 使用Java提供的MXBean来监控jvm创建了哪些线程

    MBean是一种JavaBean,MBean往往代表的是JMX中的一种可以被管理的资源。MBean会通过接口定义,给出这些资源的一些特定操作:

    属性的读和写操作

    可以被执行的操作

    关于自己的描述信息

    MXBean是一种特殊的MBean,不仅特殊在名字不一样,主要是在于在接口中会引用到一些其他类型的类时,其表现方式的不一样。在MXBean中,如果一个MXBean的接口定义了一个属性是一个自定义类型,如果MXBean定义了一种自定义的类型,当JMX使用这个MXBean时,这个自定义类型就会被转换成一种标准的类型,这些类型被称为开放类型,是定义在javax.management.openmbean包中的。

    而这个转换的规则是,如果是原生类型,如int或者是String,则不会有变化,但如果是其他自定义类型,则被转换成CompositeDataSupport类,这样,JMX调用这个MXBean提供的接口的时候,classpath下没有这个自定义类型也是可以调用成功的,但是换做MBean,则调用发的classpath下必须存在这个自定义类型的类定义

    java本身提供了一些关于线程,内存,垃圾回收和日志等管理的MXBean和一个ManagementFactory的静态工厂类,通过这些事先提供的类,我们可以监控java进程的线程创建,内存日志级别和垃圾回收等,当然,我们也可以通过创建我们自己的MXBean来实现我们想实现的一些功能

    以下的例子,展示了如何使用java自身提供的MXBean来监控一个简单的java程序启动的过程中启动了哪些java线程

    import java.lang.management.ManagementFactory;
    import java.lang.management.ThreadInfo;
    import java.lang.management.ThreadMXBean;
    
    public class MXBeanDemo {
        public static void main(String[] args) {
            System.out.println("below is thread info:");
            ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
            long[] threadIds = threadMXBean.getAllThreadIds();
            ThreadInfo[] threadInfos = threadMXBean.getThreadInfo(threadIds);
            for (ThreadInfo threadInfo : threadInfos) {
                System.out.println(threadInfo.getThreadId()+": "+threadInfo.getThreadName());
            }
        }
    }
    

    输出的信息如下:

    我们可以看到:除了main线程之外,jvm还创建了其他的四个线程,使用了IntellijIDEA的话,还会创建 一个名为Monitor Ctrl-Break的线程

  • 相关阅读:
    简单选择排序就是简单~~~
    快速排序的性能和名字一样优秀
    网关Ocelot功能演示完结,久等了~~~
    打个赌,用得最多的冒泡排序肯定少了个关键点
    C7 : 进程环境
    Java Native Interface Specification
    JNI简易开发
    Java Native Interface Specification
    MultilingualSimpleObject
    Java Native Interface Specification
  • 原文地址:https://www.cnblogs.com/jiaoyiping/p/9250668.html
Copyright © 2011-2022 走看看