2009-08-07 5 views
6

Я определяю некоторые вещи, которые я не могу просто положить в длинный цикл. И мне нужно время, чтобы посмотреть, как долго они завершатся, но похоже, что таймер имеет точность в 15-16 мс в java? Как я могу обойти это?Точность таймера в java

ответ

8

Вы пытались использовать System.nanoTime()?

Из Javadoc:

Возвращает текущее значение наиболее точного доступного системного таймера, в наносекунд.

Этот метод может использоваться только для измерения прошедшего времени и не имеет отношения к какому-либо другому понятию системного или настенного времени. Возвращаемое значение представляет собой наносекунды с некоторого фиксированного, но произвольного времени (возможно, в будущем, поэтому значения могут быть отрицательными). Этот метод обеспечивает наносекундную точность, но не обязательно наносекундную точность. Никаких гарантий относительно того, как часто меняются ценности, не делается. Различия в последовательных вызовах, которые охватывают более примерно 292 лет (2 наносекунд), не будут точно вычислять прошедшее время из-за численного переполнения.

Например, чтобы определить, сколько времени некоторый код принимает выполнить:

длинный STARTTIME = System.nanoTime(); // ... измеряемый код ... Долгое времяTime = System.nanoTime() - startTime;

+6

хех, я любите это предложение: «Различия в последовательных вызовах, которые охватывают более 292 лет (263 наносекунды), не будут точно вычислять прошедшее время из-за численного переполнения». Должен быть конкурс на самую длинную программу без прерывания/сбоя. –

4

Clocks and Timers - General Overview

Java Программирование API для Часов и таймеров Абсолютные часов "времени-дня" представлен метода System.currentTimeMillis(), которая возвращает миллисекунду представление настенных часов в миллисекунд с эпохи. Как таковой , он использует часы операционной системы « дня». Разрешение обновления этих часов часто совпадает с прерыванием таймера (например, 10 мс), но на некоторые системы фиксированы независимо от скорости прерывания.

Относительного-часы реального времени представлены по методе System.nanoTime(), который возвращает «свободный ход» время в наносекундах. Это время полезно только для сравнения с другими значениями nanoTime . Метод nanoTime использует часы с самым высоким разрешением, доступные на платформе , а при его возврате значение в наносекундах, обновление Разрешение обычно составляет только микросекунд. Однако, на некоторых системах нет выбора, кроме как использовать один и тот же источник часов, как для currentTimeMillis() - к счастью, эта встречается редко и в основном затрагивает старые системы Linux, и Windows 98.

Смежные вопросы