📚《深入浅出JVM字节码》

《Java虚拟机字节码:从入门到实战》的开源版本。作者通过自己的实战经验,整合出一套适合新手的高效学习教程。归纳并提炼知识点,制定合理路线,帮助读者更快掌握核心技术。


调用方法的四条指令

在Java字节码指令集中有四条调用方法的指令,严格来说是五条,在JDK1.7中加入了invokedynamic指令。常用的四条方法调用指令如下表所示。

指令的操作码 指令的助记符 操作数 描述
0xB7 invokespecial index,两个字节 调用私有方法、父类方法、方法
0xB6 invokevirtual index,两个字节 调用虚方法
0xB8 invokestatic index,两个字节 调用静态方法
0xB9 invokeinterface index,两个字节count0 调用接口方法

这四条方法调用指令都需要一个执向常量池中某个CONSTANT_Methodref_info常量的操作数,即告诉jvm,该指令调用的是哪个类的哪个方法。除invokestatic指令外,其余指令都至少需要一个参数,这个参数就是隐式参数this。

其中invokestatic指令用于调用一个静态方法,只要调用的方法是静态方法就必须要使用这条指令。invokeinterface指令用于调用接口方法,运行时再根据对象的类型找出一个实现该接口方法的适合方法进行调用。invokespecial指令用于调用实例初始化方法、私有方法和父类的子类可访问的方法。invokevirtual指令用于调用对象的实例方法,根据对象的实际类型进行分派。


发布于:2021 年 08 月 21 日
作者: 吴就业
链接: https://github.com/wujiuye/JVMByteCodeGitBook
来源: Github Pages 开源电子书《深入浅出JVM字节码》(《Java虚拟机字节码从入门到实战》的第二版),未经作者许可,禁止转载!


📚目录