Java 中的 System.nanoTime() 真的沒用嗎?
問題:
A標題為「Beware of System.nanoTime() in Java」的部落格文章引起了x86 上的擔憂系統中,由於使用特定於CPU 的計數器,System.nanoTime() 可能會傳回不正確的時間值。在多核心系統中,執行緒調度可能會導致分配較低計數器的處理器,從而導致時間差為負值。
答案:
該博文的說法寫於 2011 年,現已不再準確。後續作業系統更新已解決 Windows 和 Linux 上的這些問題。
Windows:
在 Windows XP Service Pack 2 及更高版本上,System.nanoTime() 使用 QueryPerformanceCounter /QueryPerformanceFrequency API,由硬體抽象層 (HAL)實現,以提供一致的時間來源
Linux:
Linux Clock_gettime(CLOCK_REALTIME) 函數確保所有處理器的時間一致。從核心版本 2.6.18 開始,如果偵測到不同步或可變頻率時間戳記計數器,則使用安全時脈來源。
其他架構:
資訊有限適用於其他體系結構,例如 SPARC 和 Solaris。但是,通常假設現代虛擬機器 (VM) 為來賓作業系統提供一致的時間來源,無論底層硬體為何。
結論:
系統.nanoTime() 仍然是 Java 中測量時間差的有效方法。 2011 年部落格文章中提出的問題已解決,但不適用於現代系統實作。
以上是Java 中的 System.nanoTime() 仍然是可靠的時間測量工具嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!