4

我正在考虑为 Java 项目生成/修改运行时字节码。

两个重要且仍在维护的 API 是 ASM 和 Javassist。

ASM 生成代码的速度最快,而且可能是最强大的。但它的用户友好性也远不如 Javassist。

就我而言,我想预先执行字节码操作,以便在应用程序设置阶段结束时完成。所以操作/生成的速度并不重要。关键是生成代码的速度,因为它将成为实时桌面游戏的一部分,而不是典型的网络应用程序,网络延迟完全隐藏了反射成本。

所以我的问题是,Javassist 是否在字节码中引入了一些不必要的开销,而在使用 ASM 时不会出现这些开销?或者,换一种说法,与使用 Javassist 相比,在 ASM 级别工作是否会为我提供生成代码的速度提升?

[编辑] 我对这两种工具的最新版本很感兴趣,最感兴趣的是看看是否有人在同一个问题上尝试过它们,并看到生成的类的速度有任何显着差异。

4

1 回答 1

2

我认为不可能对此提供简单的客观答案。这将(我想)取决于相应工具的版本、您生成的代码的性质以及(最重要的是)您是否正在使用相应的工具以及它们是否可以使用。

您应该考虑的另一件事是,沿着字节码操作路线走下去是否可能会给您带来足够的性能优势,以弥补增加的软件开发和维护痛苦。(除了你自己,任何人都无法回答......)

无论如何,我的建议是,如果您已经尝试过“纯 Java”方法并发现它提供了不可接受的性能,则只走这条路。

于 2012-06-10T12:11:08.743 回答