ASM和Javassist之间*生成的代码*的速度是否存在差异?

时间:2012-06-10 10:55:24

标签: java javassist

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

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

ASM是生成代码最快的,也可能是最强大的代码。但它的用户友好性远低于Javassist。

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

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

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

1 个答案:

答案 0 :(得分:2)

我认为不可能为此提供一个简单的客观答案。它(我想)会依赖于各个工具的版本,您生成的代码的性质,以及(最重要的)是否使用相应的工具以及它们是否可以使用。

您应该考虑的另一件事是,遵循字节码操作路线是否可能为您提供足够的性能优势来弥补增加的软件开发和维护难度。 (除了你自己以外,任何人都无法回答......)

无论如何,如果你已经尝试过“纯Java”方法并且发现它具有不可接受的性能,那么我的建议就是沿着这条路走下去。