• 栈帧的内部结构--动态返回地址(Return Address)


    每个栈帧中包含:

    • 局部变量表(Local Variables)
    • 操作数栈(Opreand Stack) 或表达式栈
    • 动态链接 (Dynamic Linking) (或指向运行时常量的方法引用)
    • 动态返回地址(Return Address) (或方法正常退出或者异常退出的引用的定义)
    • 一些附加信息

    动态返回地址(return address)

    • 存放该调用方法的pc寄存器的值
    • 一个方法的结束,有两种方式
      • 遇到return,将返回值传递给上层方法调用者,简称正常完成出口(返回指令包括ireturn(返回值为boolean,byte,char,short,int),lreturn,freturn,dreturn,以及areturn,还有return 返回为void、实例初始化方法,类和接口的初始化方法)
      • 异常完成出口,即碰到了异常,并且没有在方法内进行处理,就会退出方法。方法在执行过程总抛出异常时的异常处理,储存在一个异常处理表,方法在发生异常时候找到处理异常的代码
    • 无论通过哪种方式退出,在方法退出后都返回到该方法被调用的位置。方法正常退出时,调用者的pc计数器的值作为返回地址,即调用该方法的指令的下一条指令的地址,而通过异常退出的,返回地址是要通过异常表来确定,栈帧中一般不会保存这部分信息
    • 本质上,方法的退出就是当前栈帧出栈的过程,此时,需要恢复上层方法的数据区等信息,让调用者方法继续执行下去
    • 正常完成出口和异常完成出口的区别在于,通过异常完成出口推出的不会给他的上层调用者产生任何的返回值

    附:JVM学习目录

  • 相关阅读:
    磁盘512n,512e,4k原生磁盘的区别和操作系统支持
    TLB与内存寻址,内存读取,虚拟内存的相关原理
    文件系统逻辑块与磁盘物理扇区的关系
    DBA的工作职责和每日工作
    理解数据库中的undo日志、redo日志、检查点
    React Native 常用插件案例
    React Native 学习资料
    React Native开源项目案例
    nginx rewrite 指令
    nginx反向代理配置
  • 原文地址:https://www.cnblogs.com/ding-dang/p/13051203.html
Copyright © 2020-2023  润新知