2016-05-23 2 views
0

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

public class PerformanceTest { 
private static void addToTheBeginTest() { 
    String nameOfMethod = "Method add 250_000 result: "; 

    List<Integer> arrayList = new ArrayList<>(); 
    StopWatch.start(); 
    for (int i = 0; i < 250_000; i++) { 
     arrayList.add(0, 1); 
    } 
    long resultAL = StopWatch.getElapsedTime(); 

    outputInFile(nameOfMethod, resultAL); 
} 

private static void outputInFile(String nameOfMethod, long resultAl) { 
    File outputFile = new File("D:\\Idea Project\\ExperimentalProject\\src\\SimplePerformance\\"); 
    outputFile.mkdir(); 
    try (FileWriter writer = new FileWriter("D:\\Idea Project\\ExperimentalProject\\src\\SimplePerformance\\SimplePerformanceTest.txt", true)) { 
     writer.write(nameOfMethod); 
     writer.write(String.valueOf(resultAl) + " mc \n"); 
    } catch (IOException e) { 
     System.out.println(e.getMessage()); 
    } 
} 

class StopWatch { 
private static long result; 

public static void start() { 
    result = System.currentTimeMillis(); 
} 

public static long getElapsedTime() { 
    return System.currentTimeMillis() - result; 
    } 
} 

Результаты 3 раза

enter image description here

+0

Что вы ожидали? Что не соответствовало вашим ожиданиям? – meskobalazs

+3

у вас не будет времени, равного по шкале мс, если вы выполните один и тот же код дважды друг за другом. Но результаты довольно чертовски близки друг к другу, а среднее из них - скорее ваше время исполнения. – SomeJavaGuy

+0

@meskobalazs, разные результаты, iam ожидают всегда одинакового времени. – diofloyk

ответ

3

Причины этого уже объяснены другими ответами.

Самый простой способ справиться с этим - запустить каждый тест x1000 и принять среднее значение. Вы должны найти результаты более согласованными.

+2

Это 1000, потому что если вы посмотрите на OP, один прогон теста займет 7 секунд. Если OP не хочет ждать 4-6 недель (по мере того, как ваш 400000 потребует) для результатов его теста, тогда ему будет полезно выбирать разумное количество итераций в среднем. – Lee

1

JVMs делать оптимизации под капотом, тем больше времени конкретный код запускается. Вы должны изучить маркировку на микро-стенде. Есть целая куча вещей, которые нужно сделать, чтобы получить точные результаты.

2

Точное количество ресурсов, доступных перед запуском кода, продолжает меняться каждый раз. Невозможно сохранить его на обычных компьютерах.

+1

Почему бы вам не придумать что-то конструктивное и не спасти время каждого? – VIP

+0

Вы называете это конструктивным? 'Точное количество ресурсов, доступных перед запуском кода, продолжает меняться каждый раз. Невозможно сохранить его постоянным на обычных компьютерах. «Этот комментарий короче и информативнее, чем ваш:« Время выполнения не всегда будет одинаковым, даже на том же компьютере и том же самом CPU/RAM/HDD использовании » – UDKOX

+0

Вы не ответили на мой вопрос. Вы здесь, чтобы читать комментарии и сравнивать? – VIP

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