gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:29:41 25 4
gpt4 key购买 nike

我使用 ASM 生成了一些 java 字节码。
通过以访问者模式遍历某种小型 DSL 的某种 AST。
而且我担心生成的字节码过于“简单”,即没有任何“编译时优化”。
虽然在我的例子中,如果生成的字节码没有被优化也可以,但我还是不禁要问:那些在运行时生成字节码的项目是否需要做字节码优化?
我知道对于 jvm,大部分“优化”工作是在程序运行时通过 jit 编译完成的。所以编译时的字节码优化可能影响不大。
但是,真的吗?对动态生成的字节码做字节码优化就完全没意义了吗?有没有人可以分享一些关于字节码在有和没有任何形式的优化之间的差异的经验,主要是在运行时性能方面?

最佳答案

我知道至少有一种基于 JVM 的语言,其份额仍然没有命名,速度非常慢。它本可以使用一些编译时优化。

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

如果源语言不是 Java-ish 语言,则不适用。

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

回到您的案例,您(作为编译器)可能对您的更高级别的源语言了解得更多,您可以执行 JVM 无法执行的转换。

关于java - 动态生成的 java 字节码是否需要任何优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15312358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com