Я прочитал javadoc для System.nanoTime()
, и все это кажется ясным. Пока я не дошел до финального абзаца:
Чтобы сравнить два значения nanoTime
long t0 = System.nanoTime();
...
long t1 = System.nanoTime();
следует использовать t1 - t0 < 0, а не t1 < t0, из-за возможности численного переполнения.
Есть две вещи, которые мне непонятно:
- Почему бы проверить, если
t1 < t0
, еслиt1
было взято послеt0
? Я понимаю, что нано-время всегда увеличивается. Итак, я бы предпочел проверитьt1 > t0
. - Предположим, что опечатка, и они означали правильную проверку
t1 - t0 > 0
. Я до сих пор не понимаю, почему это правильный способ проверки, а неt1 > t0
. Они упоминают численное переполнение, и я не совсем понимаю, что они означают. Что касается численного переполнения, здесь упоминается следующее:
Различия в последовательных вызовах, которые охватывают более 292 лет (2 ^ 63 наносекунды), не будут правильно вычислять прошедшее время из-за численного переполнения.
ОК, поэтому, поскольку нано-время хранится как длинное значение, оно в конечном итоге переполняется через 292 года. И что будет дальше? Началось ли это с самого начала, т.е. Самое низкое отрицательное значение -2 ^ 63? Или он всегда останавливает измерение и возвращает (2 ^ 63 - 1)?