其他分享
首页 > 其他分享> > JVM中itable的一些问题

JVM中itable的一些问题

作者:互联网

昨晚群友来电询问关于JVM中itable的一些问题

先看看群友发来的代码。

interface IA{
void f();
}

class A impl IA{
 void f(){
 
 }
} 

class B extends A{
	void g();
}
IA foo = new B();
foo.f();

群友的问题:上面的代码,foo调用f时,是如何实现的?

首先,我们确定下在JAVA中调用方法时用到的几个指令

invokeinterface 使用的是itable

invokevitual 使用的是vtable

invokesepical 直接调用不需要转换

invokestatic  直接调用不需要转换

JAVA编译器在生成字节码的时候,就根据上面的代码生成了invokeinterface的调用,在JVM执行调用时,会依次先找foo的itable中的f方法,没有找到 就继续找父类的itable中的f方法。

标签:调用,群友,void,JVM,一些,itable,foo
来源: https://www.cnblogs.com/cfas/p/15913233.html