System.nanoTime():它真的沒用嗎?
對 System.nanoTime() 的擔憂源於這樣一種看法:在多核心系統中,由於 CPU 特定時間計數器的變化,時間測量可能會產生意外結果。從理論上講,調度到具有較低計數器的不同處理器的執行緒在計算所花費的時間時可能會產生負時間差。
解決計數器差異
但是,與假設相反,System.nanoTime() 確保了處理器之間的一致性。現代作業系統和硬體抽象(例如 HAL)已經解決了原始帖子中提出的問題。
Windows:
在 Windows 系統上,較新版本的 Sun JDK(2011 年之前)使用 Windows 的 QueryPerformanceCounter 而不是 TSC。 QueryPerformanceCounter 保證跨處理器的時間同步,消除計數器差異問題。
Linux:
Linux 核心 2.6.18 及以後透過偵測不同步的時基並回退到解決此問題可靠的時鐘來源。此保護措施可確保跨多個處理器保持一致的時間。
其他平台:
有關 System.nanoTime() 在其他平台(例如 SPARC)上的行為的資訊有限、Solaris、IBM JVM)。然而,可以合理地假設現代作業系統和 JVM 已經實現了類似的保護來保持時間一致性。
結論:
雖然最初提出的擔憂可能是System.nanoTime() 在某些歷史背景下有效,但並未過時。現代作業系統和 JVM 已經實施了保護措施,以確保跨多個處理器進行可靠的時間測量。因此,System.nanoTime() 仍然是測量 Java 應用程式中經過時間的寶貴工具。
以上是System.nanoTime() 在現代多核心系統中仍然相關嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!