最初的問題:的Java:執行人服務運行速度慢在Linux上,而不是在Windows
我有一個使用ExecutorService的一個應用程序來運行4 fixedThreadPool。當我使用這種體系結構時,應用程序在Windows上運行速度更快,單線程體系結構。但是當我在Linux中運行ExecutorService體系結構時,我的應用程序的性能比單線程應用程序更差。
兩臺機器上的CPU和其他硬件是相同的。我甚至在不同的機器上試過並得到了相同的結果。我甚至試圖將fixedThreadPool限制爲3或2,並且性能仍然較慢。什麼可能是我失蹤造成Linux機器緩慢的變量?
ExecutorService execSvc =
Executors.newFixedThreadPool(NUMBER_OF_PROCESSORS);
Perform perform[] = new Perform[n];
Future<?>[] future = new Future<?>[n];
for(int i=0;i<n;i++)
future = execSvc.submit(perform[i]);
for(int i=0;i<n;i++)
//To wait until all done
future[i].get();
這兩個OS都運行在同一臺機器上。 JAVA版本:窗戶1.6.0_22,Linux開放源JDK1.6.0_20
編輯:
我試圖在Linux上增加-Xincgc,似乎像最初幾分鐘的代碼運行速度快如預期啓動後加快並迅速減速。請參閱我創建的代碼塊在我的應用程序中運行數十億次,這是否表明JVM GC在不同的操作系統中的行爲不同?
在試驗之後:
4臺不同的Linux機器,它看起來像在OpenJDK是造成問題的努力之後。我不應該首先安裝openJDK,但要感謝@Alfabravo指出。
顯示一些代碼。 – 2012-02-14 16:19:21
詳細瞭解Windows系統和Linux系統:都在同一臺PC硬件上?一些已經通過測試結果測試的硬件規格將會很好... – ecle 2012-02-14 16:27:03
@eee是的,它們都在相同的硬件上運行。我會很快產生一些測試結果。 – Vig 2012-02-14 16:29:38