[讨论] 各位,能不能就JVM层面来分析下,JVM如何进行JAVA的动态绑定的?

gogole_09 2012-02-07
class Animal {
 private int i=1;
 public void walk(){System.out.println(i);}
}
public class  Duck extends Animal{
 private int i=2;
 public static void main(String...a) {
  Animal animal = new Duck();
  animal.walk();
 }
}


这个例子的结果,输出的是:1

各位请问一下, 在下面动态绑定的代码中,JVM做了哪些事情?
Animal animal = new Duck();
animal.walk();

  
nkhanxh 2012-02-08
我认为 应该和c++中虚函数实现差不多吧。应该是kclassinstance中那个vtable在作用吧。然后jit编译器会做适当的优化,比如动态内联之类的。

具体细节我就不清楚了


gogole_09 写道
class Animal {
 private int i=1;
 public void walk(){System.out.println(i);}
}
public class  Duck extends Animal{
 private int i=2;
 public static void main(String...a) {
  Animal animal = new Duck();
  animal.walk();
 }
}


这个例子的结果,输出的是:1

各位请问一下, 在下面动态绑定的代码中,JVM做了哪些事情?
Animal animal = new Duck();
animal.walk();

  

Global site tag (gtag.js) - Google Analytics