java - 为什么 OpenJDK 将私有(private)方法放入 vtable 中?

标签 java jvm bytecode openjdk

似乎openJDK 8将非 finalstatic 的私有(private)方法放入 vtable 中。当动态绑定(bind)未用于私有(private)方法(因为它们是用 invokespecial 调用的)或使用时,为什么会这样?

最佳答案

这样做是为了处理一些罕见的情况,即父类(super class)中存在具有相同名称和签名的可重写方法。虽然肯定有改进的地方,但可能针对 JDK 9。

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

Private methods always get a vtable entry to handle backward compatibility with classes - i.e. you can have the same name of a private method local to your class and also inherit a method of from your superclass, which will get inherited around the private method, by your child.

关于java - 为什么 OpenJDK 将私有(private)方法放入 vtable 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28528192/

相关文章:

java - Ant:p4sync 文件集

java - HQL 使用两列中的最大值对记录进行排序

java - 对于 eclipse,哪个 -vm 更可取?

Java逆向工程教程

java - 具有外部身份验证的 Seam 安全性

java - 如何使用 Spring 4.0.6 为 Hibernate 4.3.5.Final 全局设置 FlushMode?

java - JVM 进程大小和内存堆大小之间的巨大差异

java - 在另一台计算机上运行java项目时出现"A fatal error has been detected by the Java Runtime Environment"

jvm - 为什么不是所有的 java 字节码最初都解释为机器码?

java - 我可以在动态加载的 .jar(使用 ClassLoaders)中设置断点吗?