Захватывает время выполнения между 2 операторами Java? - PullRequest
8 голосов
/ 07 июля 2010

Я хочу указать время, необходимое для перехода от оператора A к оператору B в классе Java. Между этими утверждениями делается много вызовов веб-сервисов. Я хотел знать, есть ли какая-то функция, похожая на секундомер, в java, которую я мог бы использовать для получения точного времени?

Kaddy

Ответы [ 3 ]

14 голосов
/ 07 июля 2010

Это даст вам количество наносекунд между двумя nanoTime() вызовами.

long start = System.nanoTime();
// Java statements
long diff = System.nanoTime() - start;

Для более сложных подходов есть несколько дублирующих вопросов, касающихся классов секундомера:

3 голосов
/ 07 июля 2010

@ Ответ Бен С. точный.

Тем не менее, следует отметить, что подход вставки операторов измерения времени в ваш код не масштабируется:

  • Это делает ваш код беспорядочным.
  • Это замедляет работу вашего приложения. Эти звонки на System.nanoTime() не приходят бесплатно!
  • Это вводит возможность ошибок.

Если ваша настоящая цель состоит в том, чтобы попытаться выяснить, почему ваше приложение работает медленно, чтобы вы решили, что именно оптимизировать, то лучшим решением будет использование профилировщика Java. Это имеет то преимущество, что вам нужно вносить нулевые изменения в ваш исходный код. (Конечно, профилирование не дает вам точного времени, проведенного в определенных разделах. Скорее, оно дает вам пропорции времени ... что гораздо более полезно для принятия решения о том, где оптимизировать.)

0 голосов
/ 07 июля 2010

System.currentTimeMillis получит его в миллисекундах, а нанотайм - в наносекундах.

Если вы пытаетесь сравнить производительность различных методов, обратите внимание, что среда JVM сложна, поэтому просто брать один раз не имеет смысла. Я всегда пишу цикл, в котором я выполняю метод 1 несколько тысяч раз, затем выполняю System.gc, затем выполняю метод 2 несколько тысяч раз, затем выполняю другой System.gc, затем возвращаюсь назад и снова делаю все как минимум пять или шесть раз. Это помогает усреднить время для сборки мусора, компиляции точно в срок и других волшебных вещей, происходящих в JVM.

...