2009-07-29 69 views
2

機器是雙核的,操作系統使用多處理器內核。爲了運行一些性能評估,我想將JVM的線程相關性設置爲單個內核。然而,我擔心我會得到偏差的性能測量結果,因爲JVM可能不知道它現在被約束到單個核心,但仍然使用多處理器基元來進行線程同步和垃圾回收。儘管可以從命令行調整垃圾回收器,但這不可能用於線程同步。如何告訴Hotspot JVM是否使用單處理器或多處理器線程同步?

現在,JVM主要爲其線程使用(*)OS線程。所以也許這個問題應該是「Do OSes(Windows/Linux)在多線程應用程序中使用正確的同步原語,它們通過設置相應進程的線程相似性來約束使用單個內核?」

(*)這在Windows上並不完全正確,在調用操作系統之前,JVM自行旋轉。該行爲可以通過-XX:+ UseSpinning和-XX:PreBlockSpin設置進行控制。

回答

0

如果您只設置了JVM的親和性,那麼結果將在某種程度上傾斜。即使JVM在單核機器上運行100%,操作系統內核和其他用戶空間代碼仍然會使用額外的內核。這意味着更少的上下文切換開銷,因此不同的性能特徵。

我只是禁用第二個核心。假設你使用的是Windows XP:編輯c:\boot.ini加入

/onecpu 

boot options列表並重新啓動計算機。