首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >动态生成的java字节码需要优化吗?

动态生成的java字节码需要优化吗?
EN

Stack Overflow用户
提问于 2013-03-09 23:23:59
回答 2查看 502关注 0票数 7

我用ASM做了一些java字节码的生成。

通过在访问者模式中遍历某种小型DSL的某种AST。

我担心生成的字节码太“简单”,也就是说,没有任何“编译时优化”。

虽然在我的例子中,如果生成的字节码没有优化,这可能是可以的,但我仍然不禁要问:那些在运行时生成字节码的项目是否需要进行字节码优化?

我知道这样一个事实,对于jvm,大多数“优化”工作是在程序运行时通过jit编译完成的。因此,编译时的字节码优化可能影响很小。

但是,真的吗?对动态生成的字节码进行字节码优化是完全没有意义的吗?有没有人分享一些关于字节码之间的差异的经验,主要是在运行时性能方面,有没有做过任何形式的优化?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-10 00:23:40

我知道至少有一种基于JVM的语言,它们共享的名称仍然没有命名,它的速度慢得像地狱。它可以使用一些编译时优化。

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

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

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

回到您的情况,您(作为编译器)可能更了解您的更高级别的源语言,您可以执行JVM不可能执行的转换。

票数 3
EN

Stack Overflow用户

发布于 2013-03-09 23:55:09

不不用了。

如果您查看Javac的输出,您会发现它实际上根本没有进行编译时优化。多亏了Hotspot的JIT,很难断定更改字节码将对优化产生什么影响。最好不要担心这样的事情,除非你能证明存在真正的瓶颈,并有时间调查它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15312358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档