昨晚群友来电询问关于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时,是如何实现的?
invokeinterface 使用的是itable
invokevitual 使用的是vtable
invokesepical 直接调用不需要转换
invokestatic 直接调用不需要转换
JAVA编译器在生成字节码的时候,就根据上面的代码生成了invokeinterface的调用,在JVM执行调用时,会依次先找foo的itable中的f方法,没有找到 就继续找父类的itable中的f方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。