JVM基础到实战08-图形化分析工具jconsole
程序员文章站
2022-06-03 13:24:29
...
jconsole是JDK自带的一个图形化的jvm分析工具
我们启动一个项目,直接在cmd窗口下输入jconsole,发现会跳出一个jconsole的程序界面
可以看到,他直接提供了可选择的本地进程,以及需要输入账号密码的远程进程,而不是像前面使用jmap,和jstack分析的时候,需要我们先用jps列出进程pid,我们选择本地应用 pid2976
连接成功后,进入jconsole的主页面,里边展示当前进程的概况,*如果有提示,请选择不安全的连接*
内存:
线程:
点击检测死锁,会发现,我们项目的死锁线程被检测到了
可以查看vm参数:
二、实战
我们模拟一个内存增长的场景:
①代码
/**
* @Auther: jorian
* @Date: 2019/8/14 21:47
* @Description:内存增长模拟
*/
public class JconsoleMemory {
public byte[] b1 = new byte[1024*512];
public static void main(String []args) throws InterruptedException{
System.out.println("main thread start");
Thread.sleep(10000);
allocate(10000);
}
public static void allocate(int n){
List<JconsoleMemory> jconsoleMemoryList = new ArrayList<>();
for(int i = 0; i < n; i++){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
jconsoleMemoryList.add(new JconsoleMemory());
}
}
}
②启动项目等2秒,然后启动jconsole,观察内存变化
堆内存:
老年代:
eden区发生gc,所以内存先增大,到一定程度会被回收变小,大量的内存被复制到老年代
Metaspace(元数据区),1.8之后的老年代
当类加载完毕就几乎不在发生变化
上一篇: 不发胖的坚果的种类
下一篇: 适合油炸的蔬菜串串的油炸蔬菜有哪些?