调用栈和线程栈
来源:1-5 JAVA内存模型
![](http://img1.sycdn.imooc.com/user/5dd1583500015bfb07410741-100-100.jpg)
G91
2019-07-06
老师,您好,为了搞清楚调用栈和线程栈,我翻看了下这一章节中部分同学的提问,但是还是没有找到能让自己理解的答案。还望老师能够举个例子讲解一下这两者的区别和联系,谢谢
写回答
1回答
-
Jimin
2019-07-06
你好,线程栈属于jvm概念,问答区问的jvm相关的问题很少,毕竟这门课程不是讲jvm的。
线程栈其实很容易理解,如果你学习过jvm里的jstack,使用这个命令输出的内容就是线程栈了。线程栈是虚拟机中线程(包括锁)状态的一个瞬间状态的快照,即系统在某一个时刻所有线程的运行状态,包括每一个线程的调用堆栈,锁的持有情况。虽然不同的虚拟机打印出来的格式有些不同,但是线程堆栈的信息都包含:
1、线程名字,id,线程的数量等。
2、线程的运行状态,锁的状态(锁被哪个线程持有,哪个线程在等待锁等)
3、调用堆栈(即函数的调用层次关系)调用堆栈包含完整的类名,所执行的方法,源代码的行数。
对于一个高级开发而言,对这个的了解还是很重要的,许多系统问题需要借助jstack观察线程栈情况,比如查看最耗cpu的线程在做什么、死锁检查等等
而调用栈主要指的是方法的调用栈,包含方法调用过程中的一些变量信息。当我们打印异常堆栈时,看到的就是方法具体的调用栈。对于一个线程而言,调用栈只是线程栈的一部分。10
相似问题