动态生成的java字节码是否需要进行任何优化?

pf_*_*les 6 java jvm bytecode

我使用ASM生成了一些java字节代码.
通过访问模式中的某种小型DSL的某种AST.
我担心生成的字节代码太"直截了当",也就是说,没有任何"编译时优化".
虽然在我的情况下,如果生成的字节代码没有优化,那可能没问题,但我仍然不禁要问:是否需要那些在运行时生成字节代码的项目来进行字节码优化?
我知道,对于jvm,大多数"优化"工作是在程序运行时通过jit编译完成的.因此编译时的字节码优化可能影响很小.
但是,真的吗?对动态生成的字节码进行字节码优化绝对没有意义吗?有没有人可以分享一些关于差异的经验,主要是在运行时性能方面,在有和没有任何形式的优化的字节码之间?

irr*_*ble 4

我知道至少有一种基于 JVM 的语言(其共享仍然未知)速度慢得要命。它可以使用一些编译时优化。

Javac 和 JVM 分析的编程模型大致相同,因此 Javac 可以采用的任何优化技术也可以被 JVM 使用。那么 Javac 重复这项工作就没有什么意义了。实际上,Javac 可能更愿意保留尽可能多的源代码结构,以便 JVM 可以更好地推理代码。

如果源语言不是类 Java 语言,则这不适用。

想想看,CPU 也做了很多精彩的优化,那么为什么 JVM 还需要做任何优化呢?为什么不把这一切都交给CPU呢?因为CPU和JVM正在分析非常不同的代码。CPU正在分析任意的机器指令序列(尽管它可以根据高级语言的常见行为做出假设)。JVM 正在分析一种非常具体的、高级得多的语言,JVM 可以根据 CPU 几乎不可能从机器指令中发现的知识来推理和转换代码。

回到你的例子,你(作为编译器)可能对你的更高级别的源语言了解得更多,你可以执行 JVM 不可能完成的转换。