Подтвердить что ты не робот

Является ли System.currentTimeMillis() лучшим показателем производительности времени в Java?

Является ли System.currentTimeMillis() лучшим показателем производительности времени в Java? Есть ли какая-либо информация, когда вы используете это, чтобы сравнить время до того, как действие будет предпринято до момента принятия решения? Есть ли лучшая альтернатива?

4b9b3361

Ответ 1

Надеюсь, что нет - это то, что я использую, когда я не использую nanoTime().

Ответ 2

Помимо System.nanoTime(), JMX, вероятно, является наилучшим вариантом:

java.lang.management.ManagementFactory.getThreadMXBean()

вы можете запросить текущее время процессора (измеренное в секундах nano, но не с точностью до nano секунд, как для System.nanoTime())

Ответ 4

Если вам нужны монотонные измерения времени, System.nanoTime - лучший выбор. System.currentTimeMillis подвержен изменениям времени UTC - скачкам, обновлениям NTP и джиттеру, а также пользователям, устанавливающим системные часы *. Это может вызвать некоторые впечатляющие сбои в определенных типах приложений времени. System.nanoTime, как предполагается, невосприимчив ко всему этому.

Проблемы с System.nanoTime включают периодическое числовое переполнение и долговременную неточность времени, что делает System.currentTimeMillis лучше для более длительных периодов времени (при условии, что пользователи оставляют системные часы в одиночку). Обратите внимание, что переход на летнее время и часовой пояс не должен влиять на System.currentTimeMillis.

* Windows "Синхронизация с интернетом" делает поэтапные изменения. Это может быть очень разрушительным, в отличие от надлежащей реализации клиента NTP, которая "преследует" сервер, корректируя частоту клиентской базы.

Ответ 6

До Java 1.5 был только System.currentTimeMillis. Однако степень детализации зависит от базовой операционной системы и может быть большой. В Windows XP я иногда получал пробелы в 20 мс. Я слышал, что Linux намного лучше с пробелами в диапазоне 1-2 мс.

С помощью Java 1.5 вы также можете использовать System.nanoTime. У меня никогда не было проблем с этим.

Ответ 7

Один из способов заключается в том, что это измеряет время в реальном времени, а не время процессора, поэтому оно очень зависит от загрузки системы. Это нормально, если вы на свободной машине, но иногда можете получать интересные результаты, если другие процессы пытаются работать.

В этой статье есть интересное решение проблемы.