调用计入netbeans配置文件

时间:2012-06-08 11:31:14

标签: java netbeans profiler netbeans-7.1

当我在 NetBeans 7.1 中使用分析器时,我没有看到我的方法的预期调用号。

为了测试这个,我创建了一个简单的程序,它有3个方法,每个方法都被称为一万次。

public class profilerTest {
    static int one;
    static int two;
    static int three;

    public static void main(String args[]) {
        for (int i = 0 ;i<= 10000; i++)one();
    }

    public static void one() {
        System.out.println("one:" + one++);
        two();
    }

    public static void two() {
        System.out.println("two:" + two++);
        three();
    }

    public static void three() {  
        System.out.println("three:" + three++);
    }
}

我期望在我的探查器快照中看到每个方法10000个调用,我在分析结束时会看到这些调用。但是,我得到的结果显示每种方法的调用次数显着减少,并且对于这三种方法中的每种方法它们也是不同的。

我很好奇导致这种情况的原因,以及是否可以获得每种方法的实际调用次数。

以下是结果的屏幕截图:

enter image description here

我做了一些挖掘,发现这个bug report讨论了java热点编译器中的内部方法和方法内联。 建议的修复是使用jdk1.6的-Xint选项。但是,在JDK 1.7上,这不会改变我的结果。

1 个答案:

答案 0 :(得分:1)

如果您使用的是采样模式,则需要这样做。探查器使用堆栈采样来估计每种方法的进入/退出次数以及该特定方法的持续时间。

由于采样,调用数字在某些情况下可能完全关闭 - 比如在循环中运行非常短的方法。例如。当5个样本连续命中短方法作为堆栈顶部时,它将被计为一次调用,因为从采样器的POV开始,短方法永远不会退出。

时间数据在采样中更加精确 - 唯一的分隔符是采样频率。

如果您希望确切的调用计数切换到已检测的性能分析模式。否则你需要采取一些盐的采样调用。