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的线程

  • 相关阅读:
    Vue学习笔记
    用vue-cli3搭建vue项目
    Vue 封装可向左向右查看图片列表的组件
    css修改整个项目的滚动条样式
    Vue 可输入可下拉组件的封装
    es6 实现数组的操作
    JS 实现兼容IE浏览器报警提示声音
    SPRINGBOOT9--AOP的使用(本例展示统一处理Web请求日志)
    SPRINGBOOT8--log4j日志记录
    SPRINGBOOT7--使用@Async实现异步调用
  • 原文地址:https://www.cnblogs.com/jiaoyiping/p/9250668.html
Copyright © 2011-2022 走看看