У меня есть одна проблема, которую я не могу объяснить. Вот код в основной функции:
String numberStr = "3151312423412354315";
System.out.println(numberStr + "\n");
System.out.println("Lehman method: ");
long beginTime = System.currentTimeMillis();
System.out.println(Lehman.getFullFactorization(numberStr));
long finishTime = System.currentTimeMillis();
System.out.println((finishTime-beginTime)/1000. + " sec.");
System.out.println();
System.out.println("Lehman method: ");
beginTime = System.currentTimeMillis();
System.out.println(Lehman.getFullFactorization(numberStr));
finishTime = System.currentTimeMillis();
System.out.println((finishTime-beginTime)/1000. + " sec.");
Если необходимо: метод Lehman.getFullFactorization(...)
возвращает ArrayList
простых делителей в формате String.
Вот вывод:
3151312423412354315
Lehman method:
[5, 67, 24473, 384378815693]
0.149 sec.
Lehman method:
[5, 67, 24473, 384378815693]
0.016 sec.
Я был удивлен, когда увидел это. Почему второе выполнение того же метода намного быстрее, чем первое? Во-первых, я подумал, что при первом запуске метода он вычисляет время со временем запуска JVM и его ресурсов, но это невозможно, поскольку очевидно, что JVM запускается до выполнения «основного» метода.