有人能告诉我Hotspot或Dalvik是否足够智能,可以内联调用返回常量(static final)int值的最终方法吗?理想情况下,方法调用将被常量替换。这可能是在类加载时还是通过JIT完成。
这对我正在工作的某些代码的设计有影响。
有人能告诉我Hotspot或Dalvik是否足够智能,可以内联调用返回常量(static final)int值的最终方法吗?理想情况下,方法调用将被常量替换。这可能是在类加载时还是通过JIT完成。
这对我正在工作的某些代码的设计有影响。
final
关键字而进行的优化不会发生”,至少在HotSpot VM上是这样。但是由于其他因素,优化很可能会发生。这里也有一篇很好的文章解释了为什么在Java 5中,final已经不再是最终的了。
final
字段的存在或缺失。澄清了答案。 - mindas内联是JIT编译器在检测到热点时可能会执行的操作,即在字节码中被频繁调用的方法值得花费一些CPU时间将其编译成机器码。
JIT编译器很有可能会内联一个final
方法(因为它不能被覆盖)。如果该方法只返回一个常量值,则成功率会更高。
但据我所知,如果调用方法不是热点,则不会被编译,也不会内联final
方法。
(德语信息来源)
java -XX:+PrintOptoAssembly
可以帮助您找到。 - Op De Cirkel