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概要信息
实际场景中可以通过这个监控软件,来对应用程序进行一些针对性的问题分析,通过经验判断出问题所在
来源:CSDN
作者:迟到的help
链接:https://blog.csdn.net/qq_37267706/article/details/104495486