线程栈(Thread Stack)是线程运行时所占用的栈内存,它存储线程中方法调用的栈帧信息。每个线程启动后,虚拟机会为其创建一个线程栈。
线程栈的作用是:
- 存储线程中方法执行的栈帧,每个方法调用对应一个栈帧。
- 实现线程之间的方法调用信息隔离,每个线程有自己的线程栈。
- 简化线程中方法的调用与返回过程,自动管理栈帧的生成和销毁。
- 线程结束时,对应线程栈被销毁,不需要手动内存管理。
来看一个简单示例:
public void method1() {
int a = 10;
method2();
}
public void method2() {
int b = 20;
}
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
StackFrameDemo demo = new StackFrameDemo();
demo.method1();
}
}).start();
}
在该示例中:
- main线程启动一个新线程,为其创建线程栈。
- 新线程调用method1,在线程栈中为其创建一个栈帧。
- method1调用method2,在线程栈中为其创建一个栈帧。
- method2执行结束,其栈帧被 thread栈销毁。method1继续执行。
- method1执行结束,其栈帧被线程栈销毁。线程结束,线程栈被销毁。