美文网首页
检查JVM方法栈

检查JVM方法栈

作者: 叫我C30混凝土 | 来源:发表于2020-07-21 00:02 被阅读0次

以下代码为例:

public class ThreadClass {
    static int i = 0;

    public static void main(String[] args) {
        new Thread(() -> {
            doSomething();
            return;
        }).start();
        doSomething();
    }

    private static void doSomething() {
        while (true) {
            i++;
        }
    }
}
  1. jps 查询卡住的进程id;
$ jps
2496 RemoteMavenServer
2932 Jps
15144 ThreadClass
8088 Launcher
3564
  1. jstack 进程id,查看里面所有的方法栈;
$ jstack 15144

"Thread-0" #11 prio=5 os_prio=0 tid=0x00000000191a0000 nid=0x2184 runnable [0x0000000019d0e000]
   java.lang.Thread.State: RUNNABLE
        //↓↓↓在方法栈中的每一行代表一个栈针
        //即使两个线程调用同一个方法,但两个栈针是独立的,虽然他们共享同一个变量i,但是两个方法栈栈针的局部变量都是私有的;
        //代码是说明书,线程是工人,两个工人拿着相同的说明书分别创建了两个栈针;
        at com.project.ThreadClass.doSomething(ThreadClass.java:17) 
        at com.project.ThreadClass.lambda$main$0(ThreadClass.java:9)
        at com.project.ThreadClass$$Lambda$1/42768293.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:748)

"main" #1 prio=5 os_prio=0 tid=0x00000000028f7000 nid=0x2e4 runnable [0x000000000272f000]
   java.lang.Thread.State: RUNNABLE
        at com.project.ThreadClass.doSomething(ThreadClass.java:17)
        at com.project.ThreadClass.main(ThreadClass.java:12)

相关文章

网友评论

      本文标题:检查JVM方法栈

      本文链接:https://www.haomeiwen.com/subject/iwipkktx.html