Вы звоните Duration.getNano()
на Duration
, возвращаемом elapsed()
, а это не то, что вам нужно.
Внутреннее представление Duration
- эточисло секунд плюс нано-смещение для любой дополнительной доли целой секунды в продолжительности.Duration.getNano()
возвращает это нано-смещение, и его почти никогда не следует вызывать, если только вы не вызываете Duration.getSeconds()
.
Метод, который вы, вероятно, хотите вызвать, - toNanos()
, который преобразует всю длительность вколичество наносекунд.
Редактировать: В этом случае это не объясняет то, что вы видите, поскольку кажется, что печатаемые нано-смещения, вероятно, находятся в пределах одной секунды, ноэто все еще тот случай, когда вы не должны использовать getNano()
.
. Фактическая проблема, вероятно, заключается в некоторой комбинации загрузки классов или дополнительной работы, которая должна произойти во время первого вызова, и / или JIT, улучшающей производительность в будущем.вызовов (хотя я не думаю, что цикл 10 раз обязательно будет достаточным, чтобы вы увидели большую часть изменений по сравнению с JIT).