微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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方法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐