System.nanoTime(): Ist es wirklich nutzlos?
Die Bedenken bezüglich System.nanoTime() rühren von der Wahrnehmung her, dass auf In Multi-Core-Systemen können Zeitmessungen aufgrund von Schwankungen in CPU-spezifischen Zeitzählern zu unerwarteten Ergebnissen führen. Es wird angenommen, dass ein Thread, der für einen anderen Prozessor mit einem niedrigeren Zähler geplant ist, bei der Berechnung der aufgewendeten Zeit zu einer negativen Zeitdifferenz führen könnte.
Behebung der Zählerdiskrepanz
Allerdings Entgegen der Annahme gewährleistet System.nanoTime() die Konsistenz zwischen den Prozessoren. Moderne Betriebssysteme und Hardware-Abstraktionen (z. B. HAL) haben das im ursprünglichen Beitrag angesprochene Problem behoben.
Windows:
Auf Windows-Systemen sind neuere Versionen von Sun JDK (vor 2011) verwendet den QueryPerformanceCounter von Windows anstelle von TSC. QueryPerformanceCounter garantiert eine synchronisierte Zeit auf allen Prozessoren und eliminiert so Bedenken hinsichtlich der Zählerdiskrepanz.
Linux:
Linux-Kernel ab 2.6.18 beheben dieses Problem, indem sie nicht synchronisierte Zeitbasen erkennen und auf diese zurückgreifen eine zuverlässige Taktquelle. Dieser Schutz gewährleistet eine konsistente Zeitmessung über mehrere Prozessoren hinweg.
Andere Plattformen:
Informationen zum Verhalten von System.nanoTime() auf anderen Plattformen (z. B. SPARC) sind begrenzt , Solaris, IBM JVMs). Es ist jedoch vernünftig anzunehmen, dass moderne Betriebssysteme und JVMs ähnliche Schutzmaßnahmen implementiert haben, um die Zeitkonsistenz aufrechtzuerhalten.
Schlussfolgerung:
Während die ursprünglich geäußerten Bedenken möglicherweise bestanden haben Obwohl System.nanoTime() in bestimmten historischen Kontexten gültig ist, ist es nicht veraltet. Moderne Betriebssysteme und JVMs verfügen über Sicherheitsmaßnahmen, um zuverlässige Zeitmessungen über mehrere Prozessoren hinweg zu gewährleisten. Daher bleibt System.nanoTime() ein wertvolles Werkzeug zur Messung der verstrichenen Zeit in Java-Anwendungen.
Das obige ist der detaillierte Inhalt vonIst System.nanoTime() in modernen Multi-Core-Systemen noch relevant?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!