Ich versuche, die Dauer eines bestimmten Zeitraums mit beiden System.nanoTime()
und System.currentTimeMillis()
zu messen. Und je länger der Zeitraum wird, desto größer ist der Unterschied, den ich aus zwei Messungen erhalte.nanoTime und currentTimeMillis haben unterschiedliche Raten unter Mac OS
Hier ist ein kleiner Ausschnitt, das Problem demonstriert:
public class TimeTest {
public static void main(String[] args) throws Exception {
long startNanos = System.nanoTime();
long startMillis = System.currentTimeMillis();
while (true) {
long nowNanos = System.nanoTime();
long nowMillis = System.currentTimeMillis();
System.out.println((nowMillis - startMillis) - (nowNanos - startNanos)/1000000);
Thread.sleep(100);
}
}
}
Wenn auf Mac OS mit jdk läuft 1.8.0_74 gibt es einen klaren Trend, den Rückgang von 2 ms pro Minute um etwa Werte. I.e. Zuerst sehe ich nur 0 und 1, aber nach 10 Minuten gibt es Werte um -20.
konnte ich nur mit jdk8 auf dem Mac ein solches Verhalten beobachten, ist es unter Linux nicht reproduzieren konnten und auf Fenster mit beiden jdk 7 und 8
So ist die Frage: Wer lügt? Ich weiß, dass nanoTime()
zur Messung der Dauer bevorzugt werden sollte. Aber in diesem Fall bin ich mir nicht sicher, ob es wahr ist.
Kann jemand etwas zu diesem Thema ausführen?
Ich sehe eine ähnliche Sache unter Windows 7 x64 mit Java 8. – resueman