Таймер точности в Java
Я планирую некоторые вещи, которые я не могу просто вставить в длинный цикл. И мне нужно их время, чтобы увидеть, сколько времени они занимают, но кажется, что таймер имеет точность 15-16 мс в Java? Как я могу обойти это?
2 ответа
Вы пытались использовать System.nanoTime ()?
Из Javadoc:
Возвращает текущее значение наиболее точного доступного системного таймера в наносекундах.
Этот метод может использоваться только для измерения прошедшего времени и не связан с каким-либо другим понятием системного или настенного времени. Возвращаемое значение представляет наносекунды с некоторого фиксированного, но произвольного времени (возможно, в будущем, поэтому значения могут быть отрицательными). Этот метод обеспечивает точность наносекунды, но не обязательно точность наносекунды. Не делается никаких гарантий относительно того, как часто меняются значения. Различия в последовательных вызовах, которые охватывают более приблизительно 292 лет (263 наносекунды), не будут точно вычислять истекшее время из-за числового переполнения.
Например, чтобы измерить, сколько времени занимает выполнение кода:
long startTime = System.nanoTime (); //... измеряемый код... longtimateTime = System.nanoTime() - startTime;
API программирования Java для часов и таймеров Абсолютные часы времени суток представлены методом System.currentTimeMillis(), который возвращает миллисекундное представление времени настенных часов в миллисекундах с начала эпохи. В качестве такового он использует часы "времени суток" операционной системы. Разрешение обновления этих тактовых импульсов часто совпадает с разрешением прерывания по таймеру (например, 10 мс), но в некоторых системах фиксировано, независимо от частоты прерываний.
Часы относительного времени представлены методом System.nanoTime(), который возвращает "автономное" время в наносекундах. Это время полезно только для сравнения с другими значениями nanoTime. Метод nanoTime использует часы с самым высоким разрешением, доступные на платформе, и, хотя его возвращаемое значение находится в наносекундах, разрешение обновления обычно составляет только микросекунды. Однако в некоторых системах нет другого выбора, кроме как использовать тот же источник синхронизации, что и для currentTimeMillis (), - к счастью, это происходит редко и в основном затрагивает старые системы Linux и Windows 98.