2017-02-15 31 views
0

我無法找到任何答案,所以我想我會問在這裏。使用較慢處理器的Mac上的Java代碼運行速度比在我的Windows計算機上運行得更快?

我有一個帶有Intel(R)Core(TM)i7-4870HQ CPU @ 2.50GHz的MacBook和一臺帶有i7-4790K 4ghz cpu的Windows電腦。

我寫了一些Java代碼,它在兩臺機器上運行6個線程,長時間運行的任務迭代遍歷ArrayList,並且每次都是相同的正常for循環,除非每次ArrayList變得稍微短一點,每次方法運行時,時間自然會變短。但是,在我的MacBook和Windows計算機上運行它時,它們運行代碼需要花費很長時間,我的MacBook在每次花費大約12-13分鐘時間內花費大約1分鐘或更長時間才獲勝運行該方法(在這一點上)。

這兩個cpus都沒有在100%運行,並且兩臺計算機都有大量未使用的RAM。

我希望你能幫助,讓我知道是否有辦法提供更多信息。 :)

+1

在循環中是否有I/O操作,可能取決於不同的操作系統特定的實現?例如,Mac的文件系統可能比Windows更快...... – Fildor

+0

除了遍歷ArrayList,還有一些與Windows計算機上的MySQL數據庫的連接,查詢是用於控制線程間併發的簡單選擇和更新語句。 基本上,循環所做的是將每行與其餘行進行比較,以確保兩行不會進行兩次比較。所以我使用數據庫來確保同一行不會被比較兩次。 –

+1

檢查您的JVM設置是否相同。 –

回答

1

我會開始檢查每臺機器上的內存規格。通常情況下,蘋果傾向於將最快的RAM放入其機器中。

如果不是RAM,你應該檢查JVM是否配置相同:如果Windows PC上的堆空間較小,那麼可能是花費了額外的一分鐘垃圾收集。

除此之外,它一定是Mac上更快的上下文切換,但我從來沒有聽說任何人暗示OS X在本質上比Windows快。

+0

嗨。感謝你的回答。我只是檢查了RAM規格:Windows有4x8 GB 1866MHz DDR3,Mac有2 GB 8 GB 1600 MHz DDR3。 根據jvisualvm,代碼的最大堆大小設置爲8GB,每個堆大小約爲1.3GB。 –

+0

我再次查看了我的代碼,並想到我在某些時候在循環的finally子句中添加了一個System.gc(),以查看它是如何工作的。我現在已經移除了它,現在Windows似乎比MacBook快了一點,所以可能是,與Windows相比,MacBook上的GC速度更快? –

+0

鑑於處理器和內存的硬件規格,我預計Windows版本要快得多。RAM速度提高12%以上,CPU速度提高30%以上。在這一點上,我沒有解釋你的表現數字。 – JeremyP

相關問題