Я пытаюсь сравнить два разных метода для одной и той же проблемы в этой основной функции. Однако первый критерий для метода второй отличается от других результатов.Бенчмаркинг двух методов приводит к неточному результату
Также возникает проблема, когда истекшее время, для метода второго метода, равного 0.0 нс, что странно для меня.
Что мне не хватает?
Выход
Iterative Method - Elapsed time (µs)
27.151
26.895
21.773
28.432
26.127
==================================================
Formula method - Elapsed time (µs)
5.123
1.281
0.512
0.513
0.512
Главный код:
public static void main(String[] args)
{
int testSize = 5;
System.out.println("Iterative Method\t-\tElapsed time (µs)");
for (int i = 0; i < testSize; i++)
{
long startTime = System.nanoTime();
iterativeMethod();
long estimatedTime = System.nanoTime() - startTime;
System.out.println("\t\t\t\t" + estimatedTime/1000f);
}
System.out.println("==================================================");
System.out.println("Formula method\t\t-\tElapsed time (µs)");
for (int i = 0; i < testSize; i++)
{
long startTime = System.nanoTime();
int foo = SumDivisibleBy(3) + SumDivisibleBy(5) - SumDivisibleBy(15);
long estimatedTime = System.nanoTime() - startTime;
System.out.println("\t\t\t\t" + estimatedTime/1000f);
}
}
Для измерения времени используйте 'System.currentTimeMillis()'. Причина в том, что для компьютера требуется слишком много времени (в наносекундах), чтобы получить от него надежную ценность. – Emz
Не пишите свой собственный бенчмаркинг. Вместо этого используйте что-то вроде JMH (http://stackoverflow.com/questions/tagged/jmh). – Misha