【发布时间】:2013-03-09 15:23:58
【问题描述】:
我使用 ASM 生成了一些 java 字节码。
通过以访问者模式遍历某种小型 DSL 的某种 AST。
而且我担心生成的字节码太“直截了当”,即没有任何“编译时优化”。
虽然在我的情况下,如果生成的字节码没有优化也可以,但我还是忍不住要问:那些在运行时生成字节码的项目是否需要进行字节码优化?
我知道对于 jvm,大部分“优化”工作都是在程序运行时通过 jit 编译完成的。所以编译时的字节码优化可能影响不大。
但是,真的吗?对动态生成的字节码进行字节码优化是绝对没有意义的吗?有没有人可以分享一些关于有和没有任何形式优化的字节码之间差异的经验,主要是在运行时性能方面?
【问题讨论】:
-
您可以尝试对示例进行硬编码并与您的字节码生成器竞争...
-
如果你的一段代码不是经常运行,它不会被 JIT 优化,但没关系,因为它不经常运行。如果它确实经常运行,它将被优化。大家都很开心。
-
请看这个stackoverflow.com/a/1680212/655756。换句话说,您可以进行进一步的优化,但这不是必需的,因为这些优化通常看起来更像是“化妆品”。
-
@assylias 是的,你说得对,但我真正关心的是,编译时 + jit 优化的字节码是否能胜过仅通过 jit 优化的字节码?
-
@n1ckolas 啊..,我明白了,您的意思是是否进行优化不会有太大区别。因为 jit 编译最终可以使所有字节码变得非常高效,无论原始字节码有多冗长。谢谢,proguard 可能是一个不错的工具。