Ist System.nanoTime() in Java wirklich nutzlos?
Frage:
A Der Blogbeitrag mit dem Titel „Vorsicht vor System.nanoTime() in Java“ wirft Bedenken auf, dass System.nanoTime() auf x86-Systemen aufgrund der Verwendung von CPU-spezifischen Zählern möglicherweise falsche Zeitwerte zurückgeben kann. In einem Multi-Core-System könnte Thread-Scheduling dazu führen, dass ein Prozessor mit einem niedrigeren Zähler zugewiesen wird, was zu negativen Werten für Zeitunterschiede führt.
Antwort:
Die Die Behauptungen des Blogbeitrags wurden 2011 verfasst und sind nicht mehr zutreffend. Nachfolgende Betriebssystemupdates haben diese Probleme unter Windows und Linux behoben.
Windows:
Unter Windows XP Service Pack 2 und höher verwendet System.nanoTime() den QueryPerformanceCounter /QueryPerformanceFrequency API, die vom Hardware Abstraction Layer (HAL) implementiert wird, um eine konsistente Zeitquelle über alle Prozessoren hinweg bereitzustellen.
Linux:
Die Linux-Uhr „clock_gettime(CLOCK_REALTIME)“ Die Funktion stellt sicher, dass die Zeit auf allen Prozessoren konsistent ist. Ab Kernel-Version 2.6.18 wird eine sichere Taktquelle verwendet, wenn nicht synchronisierte Zeitstempelzähler oder Zeitstempelzähler mit variabler Frequenz erkannt werden.
Andere Architekturen:
Es liegen nur begrenzte Informationen vor Informationen zu anderen Architekturen wie SPARC und Solaris sind verfügbar. Es wird jedoch allgemein davon ausgegangen, dass moderne virtuelle Maschinen (VMs) eine konsistente Zeitquelle für Gastbetriebssysteme bereitstellen, unabhängig von der zugrunde liegenden Hardware.
Fazit:
System .nanoTime() bleibt eine gültige Methode zur Messung von Zeitunterschieden in Java. Die im Blogbeitrag von 2011 geäußerten Bedenken wurden behoben und gelten nicht für moderne Systemimplementierungen.
Das obige ist der detaillierte Inhalt vonIst System.nanoTime() in Java immer noch ein zuverlässiges Zeitmesswerkzeug?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!