虚拟机栈(VM Stack)

虚拟机栈(VM Stack)

虚拟机栈(VM Stack)
虚拟机栈(VM Stack)

1.是线程私有的区域
2.和pc Register一样,跟线程生命周期相同,每个线程分配一个独立的vm stack
3.没执行一个方法都同步创建一个该方法的stack frame(栈帧),方法执行完毕的过程,就对应着一个栈帧在VM Stack中从入栈道出栈的过程。
4.每一个栈帧stack frame包含局部变量表、操作数栈、方法返回值、动态链接
5.局部变量表包含:基本数据类型、引用、returnaddress类型。是一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量。
6.变量槽:是局部变量表的最小单位,来存量数据。
注意:
很多人说:基本数据和对象引用存储在栈中。当然这种说法虽然是正确的,但是很不严谨,只能说这种说法针对的是局部变量。局部变量存储在局部变量表中,随着线程而生,线程而灭。并且线程间数据不共享。但是,如果是成员变量,或者定义在方法外对象的引用,它们存储在堆中。因为在堆中,是线程共享数据的,并且栈帧里的命名就已经清楚的划分了界限 : 局部变量表!