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