1.查看
jconsole
命令,可以启动图形控制台来监视和管理 Java 应用程序。需要有桌面环境,Linux没桌面的服务器,不能用。
打开cmd
或powershell
输入jconsole -h
,就会弹出来jconsole的帮助命令界面。
(base) PS G:\Project\highway-resources>jconsole -h
这些都是中文,不过多解释了。既然是图像界面,用操作来讲解。
在cmd
或powershell
输入jconsole
,会打开JConsole的图像界面。
我们提前运行一个Java程序,以方便我们观察
import java.util.concurrent.TimeUnit;
/**
* 学习jconsole
*
* @author 编程还未
* @since 2022/4/18 20:56
**/
public class TestJConsole {
public static void main(String[] args) {
System.out.println("hello world");
try {
Thread.currentThread().setName("Test jconsole");
//等待十分钟,方便使用jconsole命令
TimeUnit.MINUTES.sleep(10);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
选不安全的连接。这个主要是因为没用https
,这个不影响。连接后进到下面的概要界面。
概览,没什么好解释的,显示的是一个统计汇总后的结果。可以选择后面的内存
、线程
、类
、VM概要
、MBean
来查看各项的详细内容,主要是前四个。
2.各区域详解
2.1.内存
内存:就是查看JVM运行时,占用的内存情况。这里可选各种内存的使用情况。如果不了解JVM运行时内存划分的话,可以参考我这边文章面试必备——图文剖析JVM的运行时数据区_编程还未的博客-CSDN博客
2.1.1.观察内存的波动
我们用一个demo,模拟一下频繁使用时,内存的情况。
启动jconsole的时候,可以用jconsole -interval=1
,每秒刷新一次。
/**
* 学习jconsole,观察劲爆一点的内存占用
*
* @author 编程还未
* @since 2022/4/18 20:56
**/
public class TestJConsole1 {
public static void main(String[] args) throws InterruptedException {
//循环一万次,创建数组
for (int i = 0; i < 10000; i++) {
int[] a = new int[1024];
//暂停100毫秒,不然一万次循环太快,没等打开工具就执行完了
TimeUnit.MILLISECONDS.sleep(100);
}
}
}
2.2.线程
线程这块,就是观察线程的数量。
上图红框位置是当前进程下的线程列表,点击选择后,右侧是线程的详细信息,可以进行线程的堆栈跟踪。
2.2.1.观察线程的波动
我们用一个demo,模拟一下频繁使用时,线程的情况。
启动jconsole的时候,可以用jconsole -interval=1
,每秒刷新一次。这个观察一下就可以把程序关掉,让他自己运行完,有可能把CPU跑崩掉。
import java.util.concurrent.TimeUnit;
/**
* 学习jconsole,观察劲爆一点的线程情况
*
* @author 编程还未
* @since 2022/4/18 20:56
**/
public class TestJConsole2 {
public static void main(String[] args) throws InterruptedException {
//循环一万次,创建线程
for (int i = 0; i < 10000; i++) {
new Thread(new Runnable() {
@Override
public void run() {
try {
TimeUnit.SECONDS.sleep(60);
System.out.println("线程创建");
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}).start();
TimeUnit.MILLISECONDS.sleep(100);
}
TimeUnit.SECONDS.sleep(60);
}
}
2.3.类
类这个就是加载的类。这个没什么好说的。
2.4.VM概要
这个是JVM相关的信息,版本信息,配置参数等。