开发安卓设备游戏时,我需要针对完全没有JIT并且仅依赖字节码优化的设备进行开发。我想知道这些优化的集合是否为空。
实际上,Java编译器(即javac而不是JIT)是否会进行任何优化,例如将a / 4转换为>>2?或者所有的优化都是JIT的工作?
实际上,Java编译器(即javac而不是JIT)是否会进行任何优化,例如将a / 4转换为>>2?或者所有的优化都是JIT的工作?
a / 4
转换为a >> 2
不能保证在任何处理器上都能使程序运行更快。我曾经在某个地方读过一篇文章(抱歉,现在找不到了……)解释说,在(我认为是)现代x86处理器上,a >> 2
甚至可能比a / 4
更慢。a / 4
转换为a >> 2
,除非您有真实的证据(来自性能测量)表明这样做是值得的。a / 4
比 a >> 2
更快的直觉可能是错误的。你需要进行一些严肃的应用程序分析来弄清楚:
javac
编译器不太可能尝试微调算术运算。最佳本地代码取决于实际执行平台的硬件,如果 javac 尝试优化字节码,则很可能会使 JIT 编译器的任务更加困难。