Документация для System.nanoTime()
гласит следующее (основное внимание).
Этот метод может использоваться только для измерения прошедшего времени и не имеет отношения к какому-либо другому понятию системного или настенного времени. Возвращаемое значение представляет собой наносекунды с некоторого фиксированного, но произвольного времени (возможно, в будущем, поэтому значения могут быть отрицательными). Этот метод обеспечивает наносекундную точность, но не обязательно точность наносекунд. Не гарантируется, как часто меняются значения.
Как я вижу, это можно интерпретировать двумя разными способами:
-
Предложение в жирным выше относится к отдельным возвращаемым значениям. Затем точность и точность следует понимать в численном смысле. То есть, точность относится к числу значимых цифр - положению усечения, а точность заключается в том, является ли число правильным (например, описанное в верхнем ответе здесь В чем разница между "точностью" и "точностью" ?)
-
Предложение в жирный выше относится к возможности самого метода. Затем точность и точность следует понимать как иллюстрированные аналоги мишени (http://en.wikipedia.org/wiki/Precision_vs._accuracy#Accuracy_versus_precision:_the_target_analogy). Таким образом, низкая точность, высокая точность = > неправильное значение неоднократно ударяется с высокой точностью: воображая, что физическое время стоит на месте, последовательные вызовы nanoTime() возвращают одно и то же числовое значение, но оно отключено от фактического прошедшего времени, так как отсчета времени с помощью некоторой константы смещения.
Какая интерпретация является правильной? Моя точка зрения заключается в том, что интерпретация 2 означает, что измерение разницы во времени с использованием nanoTime() путем вычитания двух возвращаемых значений будет правильным для наносекунды (поскольку постоянная ошибка/смещение в измерении будет устранена), тогда как интерпретация 1 будет 't гарантировать такое соответствие между измерениями и, следовательно, не обязательно будет означать высокую точность измерений разницы во времени.
Обновлено 4/15/13: Документация по Java 7 для System.nanoTime()
обновлена до адреса возможная путаница с предыдущей формулировкой.
Возвращает текущее значение текущего источника времени с высокой разрешающей способностью Java Virtual Machine, в наносекундах.
Этот метод может использоваться только для измерения прошедшего времени и не имеет отношения к какому-либо другому понятию системного или настенного времени. Возвращаемое значение представляет собой наносекунды с некоторого фиксированного, но произвольного времени начала (возможно, в будущем, поэтому значения могут быть отрицательными). Такое же происхождение используется всеми вызовами этого метода в экземпляре виртуальной машины Java; другие экземпляры виртуальной машины могут использовать другое происхождение.
Этот метод обеспечивает наносекундную точность, но не обязательно наносекундное разрешение (то есть, как часто изменяется значение) - никаких гарантий не сделано, за исключением того, что разрешение не хуже, чем разрешение
currentTimeMillis()
.Различия в последовательных вызовах, которые охватывают более 292 лет (2 63 наносекунды), не будут правильно вычислять прошедшее время из-за численного переполнения.
Значения, возвращаемые этим методом, становятся значимыми только тогда, когда вычисляется разница между двумя такими значениями, полученными в одном экземпляре виртуальной машины Java.