似乎openJDK 8将非final
和static
的私有方法放入vtable。为什么当动态绑定不用于私有方法时(因为它们是用invokespecial调用的)或者它是否被使用?
答案 0 :(得分:4)
这样做是为了处理在超类中存在具有相同名称和签名的可覆盖方法时的一些罕见情况。虽然肯定有一个改进的地方,但可能是针对JDK 9的。
请参阅https://bugs.openjdk.java.net/browse/JDK-8024368
私有方法总是获得一个vtable条目来向后处理 与类的兼容性 - 即你可以使用相同的名称 您的类本地的私有方法,并继承from的方法 你的超类,它将继承私有方法, 由你的孩子。