快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
     ClassGen cgen = new ClassGen(jclas);          Method[] methods = jclas.getMethods();          int index;          for (index = 0; index < methods.length; index++)  {            if (methods[index].getName().equals(argv[1])) {              break;            }          }          if (index < methods.length) {            addWrapper(cgen, methods[index]);            FileOutputStream fos =               new FileOutputStream(argv[0]);            cgen.getJavaClass().dump(fos);            fos.close();          } else {            System.err.println("Method " + argv[1] +              " not found in " + argv[0]);          }        } catch (IOException ex) {          ex.printStackTrace(System.err);        }      } else {        System.out.println           ("Usage: BCELTiming class-file method-name");      }    } }

Java编程的动态性,第7部分: 用BCEL设计字节码(5)

时间:2011-04-09 IBM Dennis M. Sosnoski

试一试

清单 9 显示了以未修改形式第一次运行 StringBuilder 程序的结果,然后运行 BCELTiming 程序以加入计时信息,最后运行修改后的 StringBuilder 程序。可以看到 StringBuilder 在修改后是如何开始报告执行时间的,以及时间为何比构建的字符串长度增 加更快,这是由于字符串构建代码的效率不高所致。

清单 9. 运行这个程序

[dennis]$ java StringBuilder 1000 2000 4000 8000 16000 Constructed string of length 1000 Constructed string of length 2000 Constructed string of length 4000 Constructed string of length 8000 Constructed string of length 16000 [dennis]$ java -cp bcel.jar:. BCELTiming StringBuilder.class  buildString [dennis]$ java StringBuilder 1000 2000 4000 8000 16000 Call to method buildString$impl took 20 ms. Constructed string of length 1000 Call to method buildString$impl took 79 ms. Constructed string of length 2000 Call to method buildString$impl took 250 ms. Constructed string of length 4000 Call to method buildString$impl took 879 ms. Constructed string of length 8000 Call to method buildString$impl took 3875 ms. Constructed string of length 16000

包装 BCEL

BCEL 有比我在本文中所介绍的基本类操作支持更多的功能。它还包括完整的验证器实现 以保证二进制类对于 JVM 规范是有效的(参见 org.apache.bcel.verifier.VerifierFactory ),一个生成很好地分帧并链接的 JVM 级二 进制类视图的反汇编程序,甚至一个 BCEL 程序生成器,它输出源代码以让 BCEL 程序编译 所提供的类。( org.apache.bcel.util.BCELifier 类没有包括在 Javadocs 中,所以其用 法要看源代码。这个功能很吸引人,但是输出对大多数开发人员来说可能人过于隐晦了)。

我自己使用 BCEL 时,发现 HTML 反汇编程序特别有用。要想试用它,只要执行 BCEL JAR 中的 org.apache.bcel.util.Class2HTML 类,用要反汇编的类文件的路径作为命令行参 数。它会在当前目录中生成 HTM

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号