所有的圈數預計大概都是同一時間,那麼爲什麼第一圈和第二圈會出現異常?納秒級定時器給出奇數結果
輸出:
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
「*所有圈數預計大約在同一時間*」=>否 – assylias