Od jakiego momentu System.nanoTime() zaczyna notować czas?

0

Cześć, od jakiego momentu System.nanoTime() zaczyna notować czas?
Znalazłem kilka odpowiedzi na to pytanie, ale w jednej jest napisane, że od momentu startu systemy(windows, być może), a w drugim - od początku pracy kodu. Jak to jest w rzeczywistości?
Dziękl

3

https://docs.oracle.com/javase/7/docs/api/java/lang/System.html#nanoTime()

This method can only be used to measure elapsed time and is not related to any other notion of system or wall-clock time. The value returned represents nanoseconds since some fixed but arbitrary origin time (perhaps in the future, so values may be negative). The same origin is used by all invocations of this method in an instance of a Java virtual machine; other virtual machine instances are likely to use a different origin.

0

Ta metoda to jest źródło 'monotonic time', czyli od kiedy nie powinno mieć znaczenia. Istotne jest, że kolejne wywołanie zwraca wartość większą niż poprzednie. Można też użyć różnicy i tu może być tylko taki malutki problem z dokładnością, że się generator kwarcowy rozgrzeje i chodzi trochę za szybko.
Natomiast czas 'ścienny' może się nawet cofnąć, jak komputer synchronizuje sobie czas przez NTP, i może też na chwilę zmienić szybkość jak są 'leap secons', dlatego w ogólności źle nadaje się do pomiaru różnicy.

2

Istotne jest, że kolejne wywołanie zwraca wartość większą niż poprzednie.

Jest mały haczyk. Jeśli origin time to coś bliskiego java.lang.Long.MAX_VALUE to wartość się szybko przepełni. Trzeba więc liczyć różnicę między zwracanymi wartościami i dopiero te różnice z czymkolwiek porównywać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1