- jconsole是Java 5 开始,在JDK中自带的java监控和管理控制平台。
- 用于堆JVM中内存、线程和类等的监控,是一个基于JMX的GUI性能监控工具。
如何启动jconsole?
方法1:找到jdk安装目录的bin文件夹,双击jconsole
方法2:win+r 输入cmd,打开dos窗口,直接输入jconsole
我们看到有两种链接方式:本地连接和远程连接。
- 本地连接
测试代码:
/**
* -Xms600m -Xmx600m -XX:SurvivorRatio=8
*/
public class HeapInstanceTest {
byte[] buffer = new byte[new Random().nextInt(1024 * 100)];
public static void main(String[] args) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ArrayList<HeapInstanceTest> list = new ArrayList<HeapInstanceTest>();
while (true) {
list.add(new HeapInstanceTest());
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
修改JVM的参数,设置堆内存大小为600m,eden和s0区、s1区比例为8:1:1
其他的我就不举例了,可以自己点点找找自己想要的信息。
- Jconsole检测死锁
/**
* 演示线程的死锁问题
*
*/
public class ThreadDeadLock {
public static void main(String[] args) {
StringBuilder s1 = new StringBuilder();
StringBuilder s2 = new StringBuilder();
new Thread(){
@Override
public void run() {
synchronized (s1){
s1.append("a");
s2.append("1");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (s2){
s1.append("b");
s2.append("2");
System.out.println(s1);
System.out.println(s2);
}
}
}
}.start();
new Thread(new Runnable() {
@Override
public void run() {
synchronized (s2){
s1.append("c");
s2.append("3");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (s1){
s1.append("d");
s2.append("4");
System.out.println(s1);
System.out.println(s2);
}
}
}
}).start();
}
}
远程连接:https://blog.csdn.net/weixin_32508109/article/details/116973278
jconsole作为一个了解即可,用起来也不费劲,jvm性能监控更推荐JVisualVM