为什么OpenJDK将私有方法放入vtable?

时间:2015-02-15 16:20:29

标签: java jvm bytecode openjdk

似乎openJDK 8将非finalstatic的私有方法放入vtable。为什么当动态绑定不用于私有方法时(因为它们是用invokespecial调用的)或者它是否被使用?

1 个答案:

答案 0 :(得分:4)

这样做是为了处理在超类中存在具有相同名称和签名的可覆盖方法时的一些罕见情况。虽然肯定有一个改进的地方,但可能是针对JDK 9的。

请参阅https://bugs.openjdk.java.net/browse/JDK-8024368

  

私有方法总是获得一个vtable条目来向后处理   与类的兼容性 - 即你可以使用相同的名称   您的类本地的私有方法,并继承from的方法   你的超类,它将继承私有方法,   由你的孩子。