标签:lifo 异常 mic 后缀 linking long 动态链接 bool 返回
栈帧是用来存储数据和部分结果,以及执行动态链接、方法返回值和异常信息的。
每次方法的调用都会生成一个栈帧,然后将该栈帧进行压栈。当方法结束后,该栈帧将会出栈、被销毁。
无论是正常结束还是异常结束。
每个栈帧都是自己的局部变量表、操作数栈、以及对当前方法类的运行时常量池的引用。
由当前线程创建的帧不能被其它线程引用。
每个栈帧包含一个叫局部变量的变量数组,它的长度在编译的时候确定。
单个局部变量可以保存类型的值boolean,byte,char,short,int, float,reference,或returnAddress。一对局部变量可以包含类型long或值double。
虚拟机使用局部变量在方法调用上传递参数。
例如:当前栈帧中只有 int i = 3; 它就只占一个局部变量。
每个帧包含一个(LIFO)后进先出的栈、称为操作数栈、栈的最大深度在编译时候确定。
虚拟机指令将局部变量或者常量值压栈到操作数栈中、其它虚拟机指令取出它们,最它们进行操作、将结果再压栈到操作数栈中。
例如:后缀表达式求值
1 * 2 + 3 写成后缀表达式就是 1 2 * 3 +
1 先入栈 2 再入栈 当到*号时、弹出1、2进行乘操作 将结果2压栈
然后3再压栈 当到+时、将3、2弹栈、计算结果为5再压栈
每个栈帧都包含对运行时常量池的引用,
标签:lifo 异常 mic 后缀 linking long 动态链接 bool 返回
原文地址:https://www.cnblogs.com/evildoerdb/p/10415952.html