和程序计数器一样,java 虚拟机栈也是线程私有的,它的声明周期和线程相同。
虚拟机栈 描述的是java 方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
每一个方法从调用直到执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
局部变量表存放了编译期可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用()和returnAddress 类型(指向了一条字节码指令的地址)
其中64位长度的long和double 类型的数据会占用2个局部变量空间(slot),其余的数据类型只占用一个。局部变量表所需要的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在栈帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小。