System.nanotime () пауза, когда машина спит?JAVA

Программисты JAVA общаются здесь
Anonymous
System.nanotime () пауза, когда машина спит?

Сообщение Anonymous »

Я отслеживаю ошибку в своем программном обеспечении, вызванной System.nanotime () остановкой времени подсчета, когда машина входит в состояние глубокого сна, тогда как System.currentTimeMillis () нет.
Вот минимальный воспроизводимый пример. Он непрерывно отслеживает разницу в миллисекундах между System.currentTimeMillis () и system.nanotime () .

Код: Выделить всё

public static void main(String[] args) throws Exception {
while (true) {
long epoch = System.currentTimeMillis();
System.out.println(new Date(epoch) + " " +
(epoch - TimeUnit.NANOSECONDS.toMillis(System.nanoTime())));
Thread.sleep(1000);
}
}
Я запускаю его на MacBook Pro с MacOS 15.5 на Java версии 21.0.2-Amzn Загружено через SDKMAN. The reproduction steps are:

[*]Run the program and let it loop for a while
[*]Put the laptop in sleep mode by clicking the apple logo menu and selecting "Sleep"
[*]Wait some time
[*]Wake up the computer
Check that the difference has Увеличение < /li>
< /ul>
В следующем примере вы можете увидеть, что после 15-секундного сна разница увеличилась почти на одинаковое количество. < /p>
...
Wed Jun 11 00:21:20 BRT 2025 1749394409334
Wed Jun 11 00:21:21 BRT 2025 1749394409334
Wed Jun 11 00:21:36 BRT 2025 1749394423732
Wed Jun 11 00:21:37 BRT 2025 1749394423732
...
< /code>
В документации говорится, что: < /p>

Возвращенное значение представляет наносекунд, так как какое -то фиксированное, но произвольное время происхождения [...]. То же самое происходит всеми вызовами этого метода в экземпляре виртуальной машины Java [...] < /p>
< /blockquote>
Однако это не так? Я что -то упускаю?

Подробнее здесь: https://stackoverflow.com/questions/796 ... ine-sleeps

Вернуться в «JAVA»