alibaba / TProfiler

TProfiler是一个可以在生产环境长期使用的性能分析工具
GNU General Public License v2.0
2.38k stars 923 forks source link

感觉统计方法次数计算的不对 #28

Closed fishwasser closed 10 years ago

fishwasser commented 10 years ago

我配置文件为: startProfTime = 11:15:00 endProfTime = 11:20:00 eachProfUseTime = 5 eachProfIntervalTime = 10 samplerIntervalTime = 20

我的测试Demo: public class Main { private Tortoise tor = new Tortoise(); private Rabbit rab = new Rabbit(); private Timer tim1 = new Timer(); private Timer tim2 = new Timer();

public static void main(String[] args) {
    Thread.currentThread().setName("Main Thread");  
    Main m = new Main();

    for ( int i = 0; i < 1000000; i++ ){
        m.tor.run();
        m.rab.run();

        try {
            Thread.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }       
}

}

Tortoise 和 Rabbit类内容一样的,如下。 public class Tortoise{ private static int count = 0; private static long length = 0; // 跑的距离

public void run(){
    doIt();
}   
public void doIt(){
    count++;
    length++;
}   
public long getLen(){
    return length;
}

}

结果统计出来的, com/fishwasser/main/Rabbit:doIt:14 1 5 5 com/fishwasser/main/Tortoise:doIt:14 1 2 2 com/fishwasser/main/Tortoise:run:9 1 0 0 com/fishwasser/main/Rabbit:run:9 1 0 0

首先所有的doIt() 都是run()调用的,应该一样多啊; 其次,怎么可能执行次数这么小啊?

是不是我有地方理解错了,欢迎指教!!

谢谢

fishwasser commented 10 years ago

有人知道吗? 在线等

fishwasser commented 10 years ago

哎,这么好的项目,怎么没人维护啊

jlusdy commented 10 years ago

应该是开启了采样,所以记录下来的次数是不同的(因为两个方法是顺序执行的,采样是按时间点截断计数) 而你的代码执行时间又太短,所以记录下来的次数就很少

jlusdy commented 10 years ago

@fishwasser 你可以多次执行,得到的结果肯定是不一样的 这个代码瓶颈查找不能看次数,看的是统计