胡说八道JVM—运行时数据区(栈)
2023-09-11 14:15:38 时间
栈
- 虚拟机栈是Java执行方法的内存模型。每个方法被执行的时候,都会创建一个栈帧,把栈帧压人栈,当方法正常返回或者抛出未捕获的异常时,栈帧就会出栈。
- 然后又将栈内存分为pc寄存器、本地方法栈、Java方法栈
- 需要注意的是,在jvm规范中运行时数据区包括,栈和本地方法栈,但是对于本地方法栈的实现没有严格的约束,所以hotspot 虚拟机将本地方法栈和虚拟机栈合二为一
- 存储:线程执行的基本行为是函数调用,每次函数调用的数据都通过Java栈传递。
- 结构:栈数据结构(先进后出),栈元素为栈帧。一个栈帧至少包括局部变量表、操作数栈和帧数据区。
- 过程:每一次函数调用,都有一个对应的栈帧入栈,每一次函数调用结束(return指令或抛出异常),都有一个栈帧出栈。
- 使用者:线程私有
栈理论——栈帧
-
栈中的数据都是以栈帧(Stack Frame)的格式存在,栈帧是一个内存区块,是一个数据集,是一个有关方法和运行期数据的数据集,当一个方法A被调用时就产生了一个栈帧F1,并被压入到栈中,A方法又调用了B方法,于是产生栈帧F2也被压入栈,B方法又调用了C方法,于是产生栈帧F3也被压入栈…… 依次执行完毕后,先弹出后进…F3栈帧,再弹出F2栈帧,再弹出F1栈帧。 遵循“先进后出”/“后进先出”原则。