Send As SMS

2006-04-02

Java字节码反向工程的另外的用途

http://soja.sourceforge.net/blog/2006/04/java.html 《针对Java开发规则引擎的一种优化》 一文中,我谈到了需要基于字节码分析技术来进行规则引擎的优化工作,实际上,字节码分析技术可能适用的范围会更为广泛,完全可以成为一种通用的底层技术, 从而在多个框架领域发挥重要的作用,这里列举一些应用的场景:

1、Profile。基于字节码分析技术,可以比较简单的在现有字节码中插入Profile用的代码,产生用于Profile的数据收集。
2、Code Coverage Tool。
3、Continuation Framework。基于字节码分析,我们可以重构一个方法,把这个方法变成一个等效的类,使用类变量来替代局部变量,从而实现Continuation的开发。下面是一个示例:

public void mailProcess(){
    Mail mail = waitingEmail();
    String txt = mail.getText();
    if(txt == "Hello"){
         Mail mail2 = waitingEmail();
    }
}

==〉
Class mailProcess {
   Mail mail, mail2;
   String txt;
   int status;

   public void execute(){
        switch(status){
           case 1: goto l1;
           case 2: goto l2;
        }
        mail = waitingEmail(); 
        l1:String txt = mail.getText();
        if(txt == "Hello"){
            mail2 = waitingEmail();
            l2:
        }
    }
}

在这里,waitingEmail这个方法会启动一个任务来接受邮件,同时方法抛出异常,自动的结束当前执行。当异步的任务处理接收到邮件时,将邮件的内 容保存到对象中,系统重新的从l1开时继续执行,通过这样一种字节码处理技术,即可简单的实现Continuation的功能。

4、针对log的优化,很多的java代码并没有使用 if(log.isDebugEnabled) log.debug(...) 模式来处理代码,通过字节码分析技术,我们可以对所有的 log.debug 调用自动的添加上上述的检查代码,从而使得代码可以具有更高的执行效率。这种模式可以认为是在字节码层面上的AOP

总之,字节码分析技术可以让字节码本身成为一个可以操作的对象,而且是在更高的语义层面,从而使得开发人员进一步的从这些内容中解脱出来,提高软件的开发效率。

1 Comments:

At 10:03 上午, kevinhunor8614306716 said...

Get any Desired College Degree, In less then 2 weeks.

Call this number now 24 hours a day 7 days a week (413) 208-3069

Get these Degrees NOW!!!

"BA", "BSc", "MA", "MSc", "MBA", "PHD",

Get everything within 2 weeks.
100% verifiable, this is a real deal

Act now you owe it to your future.

(413) 208-3069 call now 24 hours a day, 7 days a week.

 

张贴评论

<< Home