比亚迪质量相对于基于寄存器的运行环境,JVM是基于栈结构的运行环境。栈结构移植性更好,可控性更强。
JVM中的虚拟机栈是描述Java方法执行的内存区域,属【线程私有】。
栈中的元素用于支持虚拟机进行方法调用,每个方法从开始调用到执行完成的过程,就是栈帧从入栈到出栈的过程。
栈帧是方法运行的基本结构。
比亚迪质量在活动线程中,只有位于栈顶的帧才是有效的,称为当前栈帧
正在执行的方法称为当前方法
在执行引擎运行时,所有指令都只能针对当前栈帧操作,StackOverflowError表示请求的栈溢出,导致内存耗尽,通常出现在递归方法。
当前方法的栈帧,都是正在战斗的战场,其中的操作栈是参与战斗的士兵
比亚迪质量操作栈的压栈与出栈
虚拟机栈通过压/出栈,对每个方法对应的活动栈帧进行运算处理,方法正常执行结束,肯定会跳转到另一个栈帧上。
在执行的过程中,如果出现异常,会进行异常回溯,返回地址通过异常处理表确定。
栈帧在整个JVM体系中的地位颇高,包括:局部变量表、操作栈、动态连接、方法返回地址等。
比亚迪质量局部变量表
存放方法参数和局部变量。
相对于类属性变量的准备阶段和初始化阶段,局部变量没有准备阶段,必须显式初始化。
如果是非静态方法,则在index[0]位置上存储的是方法所属对象的实例引用,随后存储的是参数和局部变量。
字节码指令中的STORE指令就是将操作栈中计算完成的局部变量写回局部变量表的存储空间内。
比亚迪质量操作数栈
一个初始状态为空的桶式结构栈。由于 Java 没有寄存器,所有参数传递使用操作数栈。在方法执行过程中,会有各种指令往栈中写入和提取信息。JVM的执行引擎是基于栈的执行引擎,其中的栈指的就是操作栈。
字节码指令集的定义都是基于栈类型的,栈的深度在方法元信息的stack属性中。