JVM学习笔记5——方法调用

Posted by Ann on January 2, 2022

方法调用不等于方法被执行,他的唯一作用是确定执行方法的版本,即确定方法对应的直接引用。

  • 解析

编译过程中就确定的方法,会直接在解析过程中由符号引用转为直接引用,符合此条件的有:静态方法、私有方法、实例构造器、父类方法这四种方法。

  • 分派
    • 静态分派(重载的实现方式:运行期间不会变,只能确定一个更适合的版本)
    • 动态分派(重写的实现方式:原理是in m]\ vokevirtual指令,在运行期间动态寻找最优版本)
  • invokevirtual指令多态查找过程
    • 取操作数栈顶中指向的具体对象C
    • C的描述符和简单名称是否符合常量中的描述? 是—— 返回直接地址(会进行校验,若校验失败抛出IllegalAccessError)
    • 按照继承关系从下往上查找C的父类并校验
    • 找不到,抛出AbstractMethodError