摘要: 4.方法返回地址(Return Address) 存放调用方法的PC寄存器的值【保存了PC寄存器的值,当正常结束后,把这个值给到执行引擎,使线程继续工作】 一个方法的结束有两种方式: 正常执行结束 出现未处理的异常,非正常退出 无论哪种方式退出,此方法在退出后都返回到该方法被调用的位置。方法正常退出 阅读全文
posted @ 2020-03-17 17:17 Timeouting 阅读(1269) 评论(0) 推荐(0) 编辑
摘要: 3.动态链接(Dynamic Linking【指向运行时常量池的方法引用】) 每一个栈帧内部都包含有一个指向运行时常量池 中该栈帧方法的引用。包含这个引用的目的就是为了支持当前方法的代码能够实现动态链接(Dynamic Linking)。例如invokednamic指令 在Java源文件被编译到字节 阅读全文
posted @ 2020-03-17 17:15 Timeouting 阅读(3477) 评论(0) 推荐(0) 编辑
摘要: 2.操作数栈(Operand Stack) 每一个独立的栈帧中除了包含局部变量表以外,还包含一个LIFO的操作数栈,也叫表达式栈 操作数栈,在方法执行过程中,根据字节码指令,往栈中写入数据或提取数据,即PUSH和POP 某些字节码指令将值压入操作数栈,其余的字节码指令将操作数取出栈。使用后把结果压入 阅读全文
posted @ 2020-03-17 17:13 Timeouting 阅读(1225) 评论(0) 推荐(0) 编辑
摘要: 栈帧的内部结构: 局部变量表(Local Variables) 操作数栈(Operand Stack) 动态链接(Dynamic Linking) 方法返回地址(Return Address) 一些附加信息 1.局部变量表 局部变量表:也被称作本地变量表或局部变量数组 定义为一个数字数组,主要用于存 阅读全文
posted @ 2020-03-17 17:11 Timeouting 阅读(1072) 评论(0) 推荐(0) 编辑
摘要: 虚拟机栈概述 虚拟机栈出现背景: 由于跨平台性的设计,Java的指令都是根据栈来设计的。不同CPU架构不同,所以不能设计为基于寄存器的 跨平台的优点:指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多指令。 栈是运行时的单位,而堆是存储的单位 栈解决程序的运行问题,即程序如何运行,或者 阅读全文
posted @ 2020-03-17 17:09 Timeouting 阅读(780) 评论(0) 推荐(0) 编辑