首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >动态Java字节码操作框架比较

动态Java字节码操作框架比较
EN

Stack Overflow用户
提问于 2012-02-07 05:21:18
回答 2查看 8.5K关注 0票数 39

有一些用于动态字节码生成、操作和编织的框架(BCEL、CGLIB、javassist、ASM、MPS)。我想要了解它们,但由于我没有太多时间了解所有它们的所有细节,我希望看到一种比较图,说明其中一种与其他的优缺点以及原因的解释。

在SO中,我发现了许多类似的问题,答案通常是“你可以使用cglib或ASM",或者"javassist比cglib更好”,或者"BCEL很旧,正在消亡“,或者"ASM是最好的,因为它提供了X和Y”。这些答案很有用,但没有在我想要的范围内完全回答问题,更深入地比较了它们,并给出了每个答案的优缺点。

EN

回答 2

Stack Overflow用户

发布于 2012-02-13 12:06:20

如果您对字节码生成感兴趣的仅仅是使用它,那么比较图就会变得相当简单:

你需要理解字节码吗?

对于javassist :否

对于所有其他人:是

当然,即使使用javassist,您有时也可能会遇到字节码的概念。同样,其他一些库(如ASM)具有更高级别的api和/或工具支持,以屏蔽许多字节码细节。

真正区别javassist的是它包含了一个基本的java编译器。这使得编写复杂的类转换变得非常容易:您只需将一个java片段放入字符串中,并使用库将其插入到程序中的特定点。包含的编译器将构建等效的字节码,然后将其插入到现有类中。

票数 22
EN

Stack Overflow用户

发布于 2012-02-08 02:15:28

首先,这取决于你的任务。你想生成新的代码还是分析现有的字节码,以及你可能需要多复杂的分析。还有,你想投入多少时间来学习Java字节码。您可以将字节码框架分解为提供高级API的框架,这样当您需要理解JVM或使用某些字节码生成工具(ASM和BCEL)时,就可以不再学习低级操作码和JVM内部机制(例如,javaassist和CGLIB)和低级框架。对于分析来说,BCEL在历史上进化得更多一些,但ASM提供了一个很好的功能,很容易扩展。还要注意,ASM可能是唯一一个为Java7中默认启用的新字节码验证器所需的STACK_MAP信息提供最高级支持的框架。

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

https://stackoverflow.com/questions/9167436

复制
相关文章

相似问题

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