JMH: не учитывать время внутреннего метода

У меня есть такие методы:

@GenerateMicroBenchmark
public static void calculateArraySummary(String[] args) {
    // create a random data set
    /* PROBLEM HERE: 
     * now I measure not only pool.invoke(finder) time,
     * but also generateRandomArray method time
     */
    final int[] array = generateRandomArray(1000000); 

    // submit the task to the pool
    final ForkJoinPool pool = new ForkJoinPool(4);
    final ArraySummator finder = new ArraySummator(array);
    System.out.println(pool.invoke(finder));
}

private static int[] generateRandomArray(int length) {
    final int[] array = new int[1000000];
    final Random random = new Random();
    for (int i = 0; i < array.length; i++) {
        array[i] = random.nextInt(100);
    }
    return array;
}

Проблема: я не хочу, чтобы моя программа учитывала время, затрачиваемое методом generateRandomArray.

Вопрос: Как исключить generateRandomArray из измерений jmh?


person VB_    schedule 25.05.2014    source источник
comment
Тривиальный ответ был бы таким: разрабатывая свои методы так, чтобы эталонные тесты применялись ко всему методу. Укажите случайный массив как @Measurement, если можете, или сгенерируйте его в методе установки или статическом блоке, если не можете.   -  person Paul Hicks    schedule 26.05.2014


Ответы (1)


Если вы сомневаетесь, просмотрите образцы JMH. Желаемый эффект достигается с помощью аннотации @Setup к некоторому методу фикстуры, который будет запускаться перед эталонным тестом. Точный ответ в примерах JMH: здесь.

person Aleksey Shipilev    schedule 26.05.2014
comment
Пожалуйста, добавьте наиболее важные части связанного ресурса в свой ответ, на данный момент это ответ только по ссылке, и поэтому он будет понижен. - person jb.; 26.05.2014
comment
@jb Я не думаю, что SO должен поощрять копирование и вставку из документов, когда ответ точно описан в документах. Если вы ищете что-то, что можно понизить, сделайте это вместо исходного вопроса, как если бы ОП не сделал свою домашнюю работу. - person Aleksey Shipilev; 26.05.2014
comment
Есть педагогическая ценность в молчаливом указании людям на документы, которые они должны прочитать перед тем, как что-то использовать. Рассматриваемый случай тривиален и точно описан документами. Нет ни споров, ни недопонимания, просто лень со стороны ОП. Нет никакого оправдания, ИМО, в усилении лени, охватывая такие вопросы подробными ответами. - person Aleksey Shipilev; 26.05.2014
comment
Несмотря на то, что я не могу в частном порядке не согласиться с примечанием о педагогической ценности, Stack Overflow — это сайт, посвященный многим другим проблемам, помимо педагогики. Особое значение здесь имеет ценность ответа для широкой публики. Если педагогический эффект, направленный лично на ОП, - это все, что нужно, путь - 1. комментарий со ссылкой, 2. голосование за закрытие. - person Marko Topolnik; 28.06.2014