在JDK7之前方法调用的字节码指令共有四条,invokeinterface、invokespecial、invokestatic、invokevirtual。由这四条指令完成Java中所有类型方法的调用。
invokeinterface(调用接口方法)
无符号数indexbyte1和indexbyte2共同组件一个当前类常量池索引(index),该索引值为(indexby...
分类:
其他好文 时间:
2014-12-18 22:19:37
阅读次数:
350
早期的指令是invokenonvirtual,但从JDK 1.0.2开始重命名为invokespecial。为了解决下面的问题: Component A - version 1 public class GrandParent { protected void myMethod() { // ... } } public class Par...
分类:
其他好文 时间:
2014-11-28 18:41:44
阅读次数:
220
JVM中相关方法的调用的指令
invokestatic
调用静态方法。
invokespecial
用于调用构造器方法、私有方法、父类方法。
invokevirtual
用于调用类的所有虚方法。
invokeinterface
用于调用接口方法。
解析(resolution)与分派(dispatch)
解析
解析调用一定是个静态的过程,在编译期间就完全确定,在类装载的解析阶段...
分类:
其他好文 时间:
2014-08-28 13:24:09
阅读次数:
308
class文件中的access flag记录了一个类的相关信息,比如public abstract final等等。其中有一个值ACC_SUPER。现理解如下:
ACC_SUPER是用来表示如何调用父类的方法。在jdk1.1之前,jvm使用一种invokenonvirtual的指令,调用父类方法。这个方法就是现在的invokespecial 前身。既然连名字都改过了,他们的实现差距可以认为已经比较大了。invokenonvirtual是不会进行虚函数查找的,也就是总是静态绑定。...
分类:
编程语言 时间:
2014-08-27 18:53:28
阅读次数:
326