Bob*_*r02 5 java jvm virtual-machine vtable
我了解了很多有关C ++如何在存在继承(多重,虚拟等)的情况下管理其虚拟表以及如何将对象放置在内存中的知识。
现在,Java只需要担心继承的单行,而无需隐藏实例方法等。因此,在这种情况下,虚拟表应该更简单一些。我知道Class文件充当方法区域的“网关”,在该区域存储类型定义,包括我假定的方法字节码。我想到以下两个问题:
Class对象的?具有以下类和实例化:
class A{ int f(){...} }
class B extends A{ int f(){...} }
A a = new B();
a.f();
Run Code Online (Sandbox Code Playgroud)
B中的f()被调用。A解析Class文件B是正确的方法指针吗?
预先非常感谢您的评论。
对的调用a.f()在java字节码汇编语言中实现为:
aload_1 // load the local variable a, here from local address 1
invokevirtual with index into the constant pool for
method ref:
class "A"
nameAndType "f", "()I"
Run Code Online (Sandbox Code Playgroud)
在运行时,vtable 可能会解决对 Bf() 的调用。但正如您所看到的,类格式非常抽象,并且 JVM 可以完全自由地加载类以实现“高效”实现。
| 归档时间: |
|
| 查看次数: |
3980 次 |
| 最近记录: |