zoukankan      html  css  js  c++  java
  • java监视和管理控制台 jconsole

    jconsole.exe  是java自带的一个可用来监控内存,线程等信息的可视化小工具

    在java安装bin目录下

    写个小程序,来玩一下这个程序,主要看堆内存变化情况

    public class JconsoleTest {
     
        //定义b1是为了增大类的占用空间,使jconsole的视图变化更明显,这里定义的是128kb
     
        //情况一:
        byte[] b1 = new byte[128 * 1024];
     
        //情况二:
    //    public JconsoleTest() {
    //        byte[] b1 = new byte[128 * 1024];
    //    }
     
        public static void main(String[] args) {
     
            try {
                //为了在程序执行开始前,有时间打开 jconsole
                Thread.sleep(8000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            fun(1000);
        }
     
        private static void fun(int n) {
     
            List<JconsoleTest> jList = new ArrayList<JconsoleTest>();
     
            for (int i = 0; i < n; i++) {
                try {
                    //程序慢点跑,否则还没打开jconsole,就结束了
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                jList.add(new JconsoleTest());
            }
        }
    }

    首先情况一时,由于b1定义在成员变量将会长期存在,所以可以看见 jconsole上表现出来的堆内存使用量是持续增长的

     

    再看情况二,将b1定义到构造方法中,他变成了局部变量,局部变量中引用数据类型,引用存在栈中,实例存在堆中。随着构造方法的结束,引用弹栈,堆中的对象会更快被回收(如果这个变量没有人引用)

     

    VM概要信息

     

    实际场景中可以通过这个监控软件,来对应用程序进行一些针对性的问题分析,通过经验判断出问题所在

  • 相关阅读:
    tomcat feign rocketmq 最大线程数
    rocketmq
    使用docker在linux上安装oracle数据库
    dnf 腾讯 解人脸
    记一次mysql慢查询优化
    python运行内存分析
    【转】【WPF】WPF强制刷新界面
    【转】【WPF】Grid显示边框线
    流媒体服务新手入门教程03--音视频基础
    流媒体服务新手入门教程02--m7s环境搭建
  • 原文地址:https://www.cnblogs.com/penglu/p/12869190.html
Copyright © 2011-2022 走看看