最近学习JVM栈帧的时候,对其中的动态链接产生了很大的疑问。按官网说法是,栈帧中保存的动态链接是一个指向该方法类型的运行时常量池的引用。那该引用应该是指向当前类的运行时常量池吧。
Father father = new Father();
father.doSomething();
Father child = new Child();
child.doSomething(); // ① 这个虚方法的调用
但是,当我们调用虚方法的时候,如上代码①处所示。第一步是通过操作数栈中拿到栈顶的child对象的引用。第二步根据该对象引用通过Child类的运行时常量池中的虚方法表中的dosomething方法。第三步加载实际调用方法的字节码执行。
所以我的问题是,为什么在如上的动态调用过程中,我并没有用到栈帧中用于动态链接的引用??