2012-06-08 4 views
1

Когда я использую профилировщик в NetBeans 7.1, я не вижу ожидаемого номера вызова для моих методов.Количество счетов в профилях netbeans

Чтобы проверить это, я создал простую программу, которая имеет 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 горячих точек компилятора. Предлагаемое исправление заключается в использовании опции -Xint для jdk1.6. Однако на JDK 1.7 это не меняет моих результатов.

+0

Я все еще не уверен, почему это происходит. У кого-нибудь есть идея? – quodlibet

ответ

1

Если вы используете режим дискретизации, это ожидается. Профайлер использует выборку стека для оценки количества записей/выходов для каждого метода, а также продолжительности этого конкретного метода.

Из-за выборки номера вызовов номера могут быть полностью отключены в некоторых случаях - например, запуск очень коротких методов очень много раз в цикле. Например. когда 5 выборок последовательно попадают в короткий метод, являющийся вершиной стека, он будет считаться одним вызовом, потому что из POV сэмплера короткий метод никогда не выходил.

Данные о времени гораздо точнее в выборке - единственным ограничителем является частота дискретизации.

Если вы хотите, чтобы счетчик точных вызовов включался в режим инструментального профилирования. В противном случае вам нужно взять выборочные вызовы с солью.

Смежные вопросы