首頁 > Java > java教程 > Java 中的 System.nanoTime() 仍然是可靠的時間測量工具嗎?

Java 中的 System.nanoTime() 仍然是可靠的時間測量工具嗎?

DDD
發布: 2024-11-12 00:55:03
原創
1067 人瀏覽過

Is System.nanoTime() in Java Still a Reliable Time Measurement Tool?

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板