Сколько запусков Java-программы нам нужно, чтобы разогреть JVM?

Предположим, у меня есть программа на Java Test.class. Я хочу измерить время его выполнения. Я написал оболочку, чтобы сделать это, как показано ниже:

class RunTest {

    public static void main(String[] args) {

        long sum = 0;
        int iterations = 20;
        int warmupNum = 10;

        for(int i=0; i<iterations; i++){

            long start = System.nanoTime();
            Test.main(args);
            long end = System.nanoTime();

            if( i > warmupNum )
              sum += end - start;
        }

       System.out.println("ave: "+sum/(iterations-warmupNum));
    }
}

Вот как выбрать warmupNum, чем больше, тем лучше? Насколько большой достаточно? Является ли это «стандартным/общим» способом измерения производительности программы Java?


person JackWM    schedule 16.08.2012    source источник
comment
10 000 — это значение по умолчанию, прежде чем JIT начнет выполнять свою работу. Возможно, вам будет интересно прочитать этот пост. .   -  person assylias    schedule 16.08.2012
comment
@assylias Вы говорите, что 10000 — это количество повторений для оптимизации метода, верно? Здесь я хочу знать об итерациях прогрева программы, чтобы получить стабильное время выполнения.   -  person JackWM    schedule 16.08.2012
comment
да - JIT начнет компилировать метод после того, как он будет вызван 10 000 раз. Вы можете изменить это значение с помощью параметров, которые вы передаете JVM, но я не могу найти его прямо сейчас.   -  person assylias    schedule 16.08.2012
comment
это дает дополнительную информацию - 10000 в режиме сервера - кажется, 1500 в режиме клиента.   -  person assylias    schedule 16.08.2012
comment
@JackWM Примите мой ответ, если я ответил на ваш вопрос.   -  person Aravind Yarram    schedule 21.09.2013


Ответы (1)


Лучше использовать Caliper, чем создавать собственную утилиту для микротестирования.

Как написать правильный микро- тест в Java?

person Aravind Yarram    schedule 16.08.2012