你的问题的答案是是的:这就是引用的
文字的意思.
JIT将分析所有加载的类.如果可以确定在任何给定点只能有一种可以调用的方法,则可以避免派生和(如果适用)内联方法体.
相比之下,C编译器不知道所有可能的子类型,因此无法确定是否可以为(虚拟)方法完成此优化. (当链接器运行的时候,太晚了…)
其他答案表示您可以在C中手动进行此优化,但假设您(程序员)可以自己进行分析,并将方法从虚拟变为非虚拟.但是如果你错了,你有一个错误可以跟踪.
顺便说一下,我们可以假设这种优化对于一般的Java应用来说是值得的.如果不是,JIT编译器家伙不会实现它.毕竟,无价值的优化只会使Java应用程序开始更慢.