我寫了一個計算量很大的單線程程序,但是當我執行它時,我驚訝地發現我的四核處理器的利用率爲95%。我期待看到一些接近25%的利用率(一個核心)。我使用Process Explorer從sysinternals,並進一步驚訝地發現Java進程有六個線程,負載分佈幾乎相同,總處理器時間約爲16%。Java是否具有自動並行?
最初我打算並行化我的代碼,但現在看起來我不會獲得任何性能,因爲即使使用非並行代碼,CPU的負載已經達到了95%。
它似乎幾乎自動並行我的代碼,但網上的一切都告訴我,這不可能是真的。有誰知道發生了什麼事?
編輯:我加了一些截圖,希望能夠回答以下一些問題:在怠速
系統 - 1%的負荷。我使用的是具有8個邏輯內核的四核CPU。
我的非並行java程序正在運行。請注意,所有4個內核幾乎刷爆:
工具有Sysinternals我不平行的java程序的視圖。請注意具有幾乎相同負載的8個線程:
大多數系統顯示使用情況爲一個CPU完全使用的百分比。因此,在充分利用時,您的計劃將達到400%。不知道這是否是你的問題,但它肯定是可能的,你只是曲解。 – Others
也可以使用專用的Java工具,如jmc,jconsole或jstat來查看正在發生的事情。它可能是Java堆接近OutOfMemory,從而導致GarbageCollector燒錄CPU。 –
嗨史蒂夫,你在所有CPU核心中的使用率是95%嗎? –