System.nanoTime()
Возвращает показания точного таймера в наносекундах — для замера длительности. Рядом — currentTimeMillis().
Доступно с: Java 5
Синтаксис
public static long nanoTime()Возвращаемое значение
longЧисло наносекунд от произвольной точки отсчёта; имеет смысл только разность двух значений.
Примеры
Замер времени работы цикла (время меняется от запуска к запуску):
void main() {
long start = System.nanoTime();
long sum = 0;
for (int i = 0; i < 10_000_000; i++) {
sum += i;
}
long elapsed = System.nanoTime() - start;
IO.println("sum = " + sum);
IO.println("took " + elapsed / 1_000_000 + " ms");
}Результат:
sum = 49999995000000
took 11 msSystem.currentTimeMillis() — текущее время в миллисекундах с 1 января 1970 года (UTC):
void main() {
long now = System.currentTimeMillis();
IO.println(now);
IO.println(Instant.ofEpochMilli(now));
}Результат:
1791099664011
2026-10-04T07:41:04.011ZПримечания
nanoTime() не связан с календарём: его точка отсчёта произвольна, зато он никогда не идёт назад. Поэтому длительность меряют через nanoTime(), а момент времени берут из currentTimeMillis() или Instant.now() — системные часы могут перевести, и разность двух currentTimeMillis() окажется неверной. Разность удобно превратить в Duration.ofNanos(elapsed). Для серьёзных замеров производительности используйте библиотеку JMH: первый запуск кода всегда медленнее из-за прогрева JVM.
См. также
- Duration — Промежуток времени в секундах и наносекундах — часы, минуты, секунды.
- Instant — Точный момент времени на временной шкале UTC — для логов, меток времени и замеров.
- Runtime.getRuntime() — Возвращает объект Runtime текущей JVM: память, число процессоров, обработчики завершения.
Вопросы и ответы по теме
В учебнике
- Даты и время — Пакет java.time — LocalDate, LocalTime, LocalDateTime, арифметика дат, Period, Duration, ChronoUnit, часовые пояса и Instant.