【发布时间】:2014-09-29 17:49:08
【问题描述】:
方法驻留在哪里?例如,
class Foo {
public void foo_test(){}
}
Foo f1 = new Foo();
f1.foo_test();
(new Foo() {
public void singleton_test(){
foo_test();
}
}).singleton_test();
方法是驻留在类还是实例中?
JVM 是否进行方法查找(如 C++ vtable)?上面2个方法的调用是怎么发生的?
我在看这个页面:
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-5.html
但它只是简单地解释了查找过程,而不是地点或任何细节。
这个问题是专门与Oracle JVM相关的。
【问题讨论】:
-
你用你的
(new Foo() {}).singleton_test();创建了一个新的匿名类。 -
看看invokespecial和朋友们。
-
未优化的方法总是通过查找调用,优化的方法即使是虚拟的也可以内联和消除。