機器是雙核的,操作系統使用多處理器內核。爲了運行一些性能評估,我想將JVM的線程相關性設置爲單個內核。然而,我擔心我會得到偏差的性能測量結果,因爲JVM可能不知道它現在被約束到單個核心,但仍然使用多處理器基元來進行線程同步和垃圾回收。儘管可以從命令行調整垃圾回收器,但這不可能用於線程同步。如何告訴Hotspot JVM是否使用單處理器或多處理器線程同步?
現在,JVM主要爲其線程使用(*)OS線程。所以也許這個問題應該是「Do OSes(Windows/Linux)在多線程應用程序中使用正確的同步原語,它們通過設置相應進程的線程相似性來約束使用單個內核?」
(*)這在Windows上並不完全正確,在調用操作系統之前,JVM自行旋轉。該行爲可以通過-XX:+ UseSpinning和-XX:PreBlockSpin設置進行控制。