zl程序教程

您现在的位置是:首页 >  后端

当前栏目

胡说八道JVM—运行时数据区(栈)

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栈帧。 遵循“先进后出”/“后进先出”原则。