在类中使用纳米()进入/退出点的最小入侵方法?

时间:2016-02-10 14:43:52

标签: java profiling overloading

我在Java swing中有一个MVC应用程序,我想测量代码库中各个入口和出口点的nanotime()。作为玩具示例,请考虑使用方法A到Z的类Foo

public class Foo(){
    private void A(){
       do task A1()
       do task A2()
    }
    private void B(){...}
    ....
    private void Z(){ 
       do task Z1()
       do task Z2()}
 }

我需要修改方法A()和Z()来输出nanime():

public class Foo(){
    private void A(){
       do task A1();
       do task A2();
       System.out.println("Entry time: " + System.nanotime());
    }
    private void B(){...}
    ....
    private void Z(){ 
       do task Z1();
       do task Z2();
       System.out.println("Exit time: " + System.nanotime());
       }
 }

问题是我想在不改变Foo()的源代码的情况下进行这种分析。实际上,我需要做的不仅仅是打印纳米级,并且分析会使实际的方法逻辑混乱;我想不出实际的方法来做到这一点。一种方法是子类化Foo(),并重载方法;然而,这似乎很苛刻,因为代码库中还有其他几个类需要这样的处理。我不想在代码中添加4个新的子类。

在Python中,我可以在运行时重载这些方法(猴子修补),并将其封装在某个探查器对象中。

Java中是否有任何框架/方法可以做类似的事情?我见过动态代理,但不太明白它们是否适合这样的东西。

0 个答案:

没有答案