Ожидается, что все кружки пройдут примерно в одно и то же время, так почему же выбросы на первом и втором кругах?Наносекундный таймер, дающий нечетные результаты
Выход:
6.695178 ms : Lap #0
18.698311 ms : Lap #1
0.143568 ms : Lap #2
0.043931 ms : Lap #3
0.061594 ms : Lap #4
0.038496 ms : Lap #5
0.038043 ms : Lap #6
0.043478 ms : Lap #7
0.038949 ms : Lap #8
0.061141 ms : Lap #9
SSCCE:
import java.util.LinkedList;
public class StopwatchSSCCE {
public static void main(String [] args){
// ten laps of 2 billion iterations each
int laps = 10;
int iterationsEach = 2000000000;
Stopwatch stopwatch = new Stopwatch();
for(int lap = 0; lap < laps; lap++){
// empty loop
for(int i = 0; i < iterationsEach; i++);
// add lap
stopwatch.lap("Lap #" + lap);
}
stopwatch.printLaps();
}
private static class Stopwatch {
private long startTime, lastLap;
private LinkedList<String> laps = new LinkedList<>();
public Stopwatch(){
reset();
}
public void clearLaps(){
laps.clear();
}
public void reset(){
startTime = lastLap = System.nanoTime();
}
public long timeSinceLastLap(){
return System.nanoTime() - lastLap;
}
public void lap(String title) {
double split = timeSinceLastLap()/1000000.0;
lastLap = System.nanoTime();
laps.add(split + " ms :\t" + title);
}
public void printLaps(){
for(String lap : laps) System.out.println(lap);
}
}
}
Они никогда не будут равными. Вероятно, SO-планировщик работает. Программа не получает эксклюзивный доступ к процессору. – acdcjunior
Конечно, если первый круг был нарушением. Но почему второй еще больше? И это может усреднить их, но это будет означать, что класс испорчен, так как вам придется каждый раз его нагревать. – rtheunissen
"* Ожидается, что все кружки пройдут примерно в то же время *" => no – assylias