Java虚拟机栈使线程私有的,它的生命周期与线程相同(随线程而生,随线程而灭)
虚拟机栈描述的是Java方法执行的内存模型:栈帧(Stack Frame)是用于支持Java虚拟机进行方法调用和执行的数据结构,它是虚拟机栈中的栈元素
每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息

image.png

代码案例分析

  1. public class Stack {
  2. public void methodA(){
  3. int a=10;
  4. this.methodB();
  5. }
  6. public void methodB(){
  7. int b=10;
  8. this.methodC();
  9. }
  10. public void methodC(){
  11. int c=10;
  12. }
  13. }

image.png

  1. 每条线程在创建的时候都会创建一个虚拟机栈,虚拟机栈内部是一个个栈帧,每个栈帧对应一个java方法调用。例如上图,当主线程执行Stack类时,会创建3个栈帧,即每个java方法对应一个栈帧。
  2. 栈的特性是先进后出

当执行到methodA时,新建一个栈帧,进栈,处于栈顶。
当执行到methodB时,新建一个栈帧,进栈,处于栈顶。
当methodB执行结束时,methodB这个栈帧,出栈,methodA处于栈顶。
当methodA执行结束时,methodA这个栈帧,出栈,栈空。