jstack如何区分JVM级别线程和用户级别线程?

jstack -l出来的结果很多,如何区分JVM级别线程和用户级别线程?如何定位程序存在问题?简单的会点,比如死锁啥的,可是一直觉得似懂非懂。求高人详细谈谈~不甚感激!
关注者
39
被浏览
1028
jstack -l
在Oracle/Sun JDK / OpenJDK上的话,jstack -l只会为Java线程打印stack trace,而JVM的内部线程是不会有stack trace打印出来的(例如VMThread、CompilerThread、GCTaskThread,这些只会打印出个名字,但不会有stack trace)。
Java线程之中,有少量线程是为JVM内部功能提供服务的,例如Finalizer Thread、Surrogate Locker Thread、Signal Dispatcher等。这些应该挺好辨认的。剩下的都是楼主想要的“用户级线程”了。

至于“如何定位程序存在问题”,那确实得具体问题具体分析…