可能重複/單Java線程:
Would a multithreaded Java application exploit a multi-core machine very well?雙核CPU利用率W¯¯運行
我有我的雙核機上運行這樣一個簡單明瞭的Java線程( Windows XP 32位環境)
public static void main(String[] strs) {
long j = 0;
for(long i = 0; i<Long.MAX_VALUE; i++)
j++;
System.out.println(j);
}
我的期望是,它會堅持一個單一的CP U充分利用高速緩存(因爲在循環中我們繼續使用局部變量j進行操作,因此一個CPU實用程序將是100%,另一個會非常閒置。 令人驚奇的是,線程啓動後,兩個CPU的利用率都在40%〜60%左右,而一個CPU的利用率略高於另一個CPU。
我的問題是,是否有任何操作系統的負載平衡機制,當失衡已被檢測到踢?在我的情況下,Windows操作系統可能發現一個CPU接近100%,另一個幾乎空閒,因此它會定期將該線程重新安排到另一個CPU。
#EDIT1 我找到了一個可能的解釋: http://siber.cankaya.edu.tr/ozdogan/OperatingSystems/ceng328/node130.html
是,該操作系統將圍繞反彈線程。 – Mysticial 2012-03-01 02:40:47
我認爲這個問題已經回答 http://stackoverflow.com/questions/1649402/would-a-multithreaded-java-application-exploit-a-multi-core-machine-very-well – parion 2012-03-01 02:44:40
並意識到,大多數Java程序都會嘗試使用一個核心,並保留一個核心,就像我在Minecraft中發現的那樣。這裏是誰發現了這一點與他的新電腦http://mlee888.wordpress.com/2006/03/31/java-performance-in-dual-coremultiprocessor-environment/ – parion 2012-03-01 02:47:06