Принятый ответ на этот вопрос действительно неверен. Альтернативный ответ, предоставленный @brettw, хорош, но, тем не менее, не содержит деталей.
Для полного рассмотрения этого вопроса и реальной стоимости этих вызовов см. https://shipilev.net/blog/2014/nanotrusting-nanotime/
Чтобы ответить на заданный вопрос:
кто-нибудь знает, есть ли какие-либо существенные накладные расходы, вызывающие тот или иной?
- Накладные расходы на вызов
System#nanoTime
составляют от 15 до 30 наносекунд на вызов.
- Значение, сообщаемое
nanoTime
, его разрешение, изменяется только один раз в 30 наносекунд.
Это означает, что в зависимости от того, пытаетесь ли вы выполнять миллион запросов в секунду, вызов nanoTime
означает, что вы фактически теряете огромную часть второго вызова nanoTime
. В таких случаях рассмотрите возможность измерения запросов со стороны клиента, чтобы не попасть в согласованное упущение, измерение глубины очереди также является хорошим индикатором.
Если вы не пытаетесь втиснуть как можно больше работы в одну секунду, то nanoTime
не будет иметь большого значения, но скоординированное упущение все еще имеет значение.
Наконец, для полноты картины currentTimeMillis
нельзя использовать независимо от ее стоимости. Это связано с тем, что не гарантируется переход вперед между двумя вызовами. Особенно на сервере с NTP currentTimeMillis
постоянно перемещается. Не говоря уже о том, что большинство вещей, измеряемых компьютером, не занимают целую миллисекунду.
person
pjulien
schedule
20.11.2016
nanoTime
не отображает реальное время и должно использоваться только для измерения того, сколько времени что-то заняло. - person Powerlord   schedule 12.04.2011