快速业务通道

Java编程的动态性,第7部分: 用BCEL设计字节码 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
L 文件。例如,下面我将反汇编在计时例子中使用的 StringBuilder 类:

[dennis]$ java -cp bcel.jar org.apache.bcel.util.Class2HTML  StringBuilder.class Processing StringBuilder.class...Done.

图 1 是反汇编程序生成的分帧输出的屏幕快照。在这个快照中,右上角的大帧显示了添 加到 StringBuilder 类中的计时包装器方法的分解。在下载文件中有完整的 HTML 输出—— 如果要实际观看它,只需在浏览器窗口中打开 StringBuilder.html 文件。

图 1. 反汇编 StringBuilder

当前,BCEL 可能是 Java 类操作使用最多的框架。在 Web 网站上列出了一些使用 BCEL 的其他项目,包括 Xalan XSLT 编译器、Java 编程语言的 AspectJ 扩展和几个 JDO 实现。 许多其他未列出的项目也使用 BCEL,包括我自己的 JiBX XML 数据绑定项目。不过,BCEL 列出的几个项目已经转而使用其他库,所以不要将这个列表作为 BCEL 大众化程度的绝对依 据。

BCEL 最大的好处是它的商业友好的 Apache 许可证及其丰富的 JVM 指令级支持。这些功 能结合其稳定性和长寿性,使它成为类操作应用程序的非常流行的选择。不过,BCEL 看来没 有设计为具有很好的速度或者容易使用。在大多数情况下,Javassist 提供了更友好的 API ,并有相近的速度(甚至更快),至少在我的简单测试中是这样。如果您的项目可以使用 Mozilla Public License (MPL) 或者 GNU Lesser General Public License (LGPL),那么 Javassist 可能是更好的选择(它在这两种许可证下都可以用)。

下一篇

我已经介绍了 Javassist 和 BCEL,本系列的下一篇文章将深入比我们目前已经介绍的用 途更大的类操作应用程序。在 第 2 部分,我展示了方法调用反射比直接调用慢得多。在第 8 部分中,我将显示如何使用 Javassist 和 BCEL,以便用运行时动态生成的代码替换反射 调用,从而极大地提高性能。下个月请回来看另一篇 Java 编程的动态性以了解详情。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号