Время выполнения java-метода равно нулю? - PullRequest
1 голос
/ 17 декабря 2011

Я читаю системное время непосредственно перед тем, как метод вызывается, и сразу после того, как метод возвращается, принимая разницу во времени, которая даст время, необходимое методу для выполнения.

Фрагмент кода

long start = System.currentTimeMillis ();
method ();
long end = System.currentTimeMillis ();

System.out.println ("Time taken for execution is " + (end - start));

Странно то, что вывод 0 .. как это возможно ..?

Ответы [ 3 ]

9 голосов
/ 17 декабря 2011

Скорее всего, это займет меньше времени, чем достаточно грубые системные часы. (Например, вы можете обнаружить, что System.currentTimeMillis() изменяется только каждые 10 или 15 миллисекунд.)

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

Думайте об этом как о разнице между настенными часами и секундомером.

5 голосов
/ 17 декабря 2011

использование nanoTime()

1 голос
/ 17 декабря 2011

Потому что это заняло менее 1 миллисекунды?

Если вы хотите получить более значимую метрику, я бы посоветовал вызвать ваш метод в цикле 1000000 раз, синхронизировать его, а затем разделить на 1000000.

Конечно, даже тогда это может быть не представительным; влияние на кеш будет разным и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...