Geen, если вам действительно интересны подробности, предлагаю
почитать статью. Если tl/dr, то гранулярность
System .nanoTime () не хуже микросекунд, а время чтения порядка сотни тактов процессора. Впрочем, можно поэкспериментировать. Результат наверняка зависит от железа и операционки. Для моей винды 7 следующая программа:
public class Test_NanoTime {
private static final int stopperValue = 0;
private static final int num = 100;
private static final long [] stamps = new long [num];
public static void main (String [] args) {
int k, l, m;
long value;
m = 0;
for (k = 0; num > k; ++k) {
for (l = 0; stopperValue > l; ++l) {
if (0 == (l & 3)) {
++m;
}
}
stamps [k] = System .nanoTime ();
}
System .out .println (m);
System .out .println ();
System .out .println (stamps [0]);
for (k = 1; num > k; ++k) {
value = stamps [k];
System .out .println (value + " " + (value - stamps [k - 1]));
}
}
}
Выдаёт такой результат:
0
657724595953157
657724595954627 1470
657724595956098 1471
657724595957568 1470
657724595958548 980
657724595960018 1470
657724595961489 1471
657724595962469 980
657724595963939 1470
657724595965410 1471
657724595966390 980
657724595967860 1470
657724595969331 1471
657724595970311 980
657724595971781 1470
657724595972761 980
657724595974232 1471
657724595975702 1470
657724595976682 980
657724595978153 1471
657724595979133 980
657724595980603 1470
657724595982074 1471
657724595983054 980
657724595984524 1470
657724595985995 1471
657724595986975 980
657724595988445 1470
657724595989915 1470
657724595990896 981
657724595992366 1470
657724595993346 980
657724595994817 1471
657724595995797 980
657724595997267 1470
657724595998738 1471
657724595999718 980
657724596001188 1470
657724596002659 1471
657724596003639 980
657724596005109 1470
657724596006089 980
657724596007560 1471
657724596009030 1470
657724596010010 980
657724596011971 1961
657724596046769 34798
657724596048239 1470
657724596049220 981
657724596050690 1470
657724596052160 1470
657724596053140 980
657724596054611 1471
657724596056081 1470
657724596057061 980
657724596058532 1471
657724596059512 980
657724596060982 1470
657724596062453 1471
657724596063433 980
657724596064903 1470
657724596066374 1471
657724596067354 980
657724596068824 1470
657724596070294 1470
657724596071275 981
657724596072745 1470
657724596074215 1470
657724596075196 981
657724596076666 1470
657724596078136 1470
657724596079117 981
657724596080587 1470
657724596082057 1470
657724596083037 980
657724596084508 1471
657724596085488 980
657724596086958 1470
657724596088429 1471
657724596089409 980
657724596090879 1470
657724596092350 1471
657724596093330 980
657724596094800 1470
657724596095781 981
657724596097251 1470
657724596098721 1470
657724596099701 980
657724596101172 1471
657724596102642 1470
657724596103622 980
657724596105093 1471
657724596106073 980
657724596107543 1470
657724596109014 1471
657724596109994 980
657724596111464 1470
657724596112935 1471
657724596113915 980
657724596115385 1470
Варьируя переменную
stopperValue убеждаемся, что получившиеся разности связаны как с гранулярностью времени, так и с временем вызова функции
System .nanoTime (). Возможно, код ещё не сджитился, и эта гранулярность является периодом выполнения байт-кода. В любом случае, она не хуже 490 наносекунд (половина от меньшей разности, треть от большей), чего для моих предыдущих тестов достаточно сверх головы.
4. время чего измеряется?
На это вопрос лучше всего отвечает документация:
Цитата:
public static long nanoTime()Returns the current value of the running Java Virtual Machine's high-resolution time source, in nanoseconds.
This method can only be used to measure elapsed time and is not related to any other notion of system or wall-clock time. The value returned represents nanoseconds since some fixed but arbitrary origin time (perhaps in the future, so values may be negative). The same origin is used by all invocations of this method in an instance of a Java virtual machine; other virtual machine instances are likely to use a different origin.
This method provides nanosecond precision, but not necessarily nanosecond resolution (that is, how frequently the value changes) - no guarantees are made except that the resolution is at least as good as that of
currentTimeMillis().
Differences in successive calls that span greater than approximately 292 years (
nanoseconds) will not correctly compute elapsed time due to numerical overflow.
The values returned by this method become meaningful only when the difference between two such values, obtained within the same instance of a Java virtual machine, is computed.
В дополнение надо заметить, что метод использует наилучший (в смысле разрешения) из доступных в системе таймеров.
Если человек верит, то его могут переубедить только факты, а их у меня нет.
По поводу фактов и доказательств. Предлагаю
ознакомиться со статьёй. Приведён пример программы и соответствующий ей ассемблерный код.