Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JVM';s的虚拟函数查找是否有任何最终优化?_Java_Jvm - Fatal编程技术网

Java JVM';s的虚拟函数查找是否有任何最终优化?

Java JVM';s的虚拟函数查找是否有任何最终优化?,java,jvm,Java,Jvm,假设obj的类型为metalcrollbutton(来自JavaSwing)。例如,程序可以在obj上调用getButtonWidth()。尽管必须在构造时指定方向,obj.getDirection()将从BasicArrowButton调用getDirection()MetalScrollButton从JComponent和组件继承了很多内容 显然,metalcrollbutton继承了Object中的所有标准内容,比如getClass()函数,它被合理地标记为final 因此,obj.get

假设
obj
的类型为
metalcrollbutton
(来自JavaSwing)。例如,程序可以在
obj
上调用
getButtonWidth()
。尽管必须在构造时指定方向,
obj.getDirection()
将从
BasicArrowButton
调用
getDirection()
MetalScrollButton
JComponent
组件继承了很多内容

显然,
metalcrollbutton
继承了
Object
中的所有标准内容,比如
getClass()
函数,它被合理地标记为final

因此,
obj.getClass()
会导致虚拟函数查找从
metalcrollbutton
开始,一直到
Object
(当然,从人的角度来看,这是即时的),还是JVM知道直接到
Object


更一般地说,如果所需的函数在继承层次结构的某个级别是final,JVM是否有任何关于这一事实的指示,以及在查找过程中跳过无法覆盖final函数的子类的能力?

这是特定于供应商的。JVM当然知道哪些函数是final,虽然它更关心函数是否被实际重写,而不是是否可以被重写。是的,HotSpot JVM进行虚拟调用优化,而不仅仅是针对
final
方法。见@AlonsodelArte是的。这允许供应商选择他们认为最合适的方式。这是故意的。唯一可以确保在所有供应商中保持一致的是Java语言规范所说的内容。它非常精确。
getClass()
无论如何都很特别。即使没有方法查找(也存在)的优化,它也会被视为一个特殊的、不变的操作(只是从对象读取类引用),而不是方法调用。这是特定于供应商的。JVM当然知道哪些函数是最终的,虽然它更关心函数是否被实际重写,而不是是否可以被重写。是的,HotSpot JVM进行虚拟调用优化,而不仅仅是针对
final
方法。见@AlonsodelArte是的。这允许供应商选择他们认为最合适的方式。这是故意的。唯一可以确保在所有供应商中保持一致的是Java语言规范所说的内容。它非常精确。
getClass()
无论如何都很特别。即使没有方法查找(也存在)的优化,它也会被视为一个特殊的、不变的操作(只是从对象读取类引用),而不是方法调用。