Java优化:仅字节码与JIT

Aur*_*bon 6 java android jit bytecode

为Android设备开发游戏,我需要针对完全没有JIT的设备,并且只依赖于字节码优化.我想知道这些优化的集合是否为空......

实际上,java编译器(硬编译器,javac,而不是JIT)是否进行任何优化,例如将a/4转换为>> 2?或者每次优化都是JIT的工作?

Jes*_*per 7

标准Java编译器会进行一些优化,但它会将大部分优化留给JIT.

JIT知道程序正在运行的处理器,并且还可以访问运行时信息,因此它可以比Java编译器提前做更多的优化.此外,事先进行广泛的优化可能会使字节代码"混淆",使JIT更难以优化它.

我不知道Google的编译器在将Java字节代码转换为Dalvik代码时会做什么 - 它可能会进行更广泛的优化.

也许这个工具对您有用:Dalvik优化和验证使用dexopt

顺便说一下,你提到的例子并不总是有效的; 转换a / 4a >> 2无法保证让您的程序在任何处理器上运行得更快.我曾经读过一篇文章(抱歉,现在找不到它......)解释说(我认为)现代x86处理器a >> 2甚至可能比它慢a / 4.

在任何情况下,都不要过早地进行优化,比如在源代码中手动转换a / 4,a >> 2除非你有真实的证据(来自性能测量),这样做是值得的.