2013-09-25 172 views
7

我在解析XML文件的小型Windows桌面上開發了一個Java應用程序。我遇到了一個非常有趣的觀察,我很好奇。Java應用程序Windows與Mac OS X

我爲我的應用程序生成了一個可執行的jar文件,並將它運行在功能非常強大的Windows Server計算機上。它有2個物理Xeon處理器,每個8個內核主頻爲2.7 GHz,50GB RAM和7200 RPM硬盤。當我開始我的應用程序時,機器閒置,我很確定沒有其他應用程序與我共享該機器。

後來,我在我的Macbook Pro上運行可執行文件,以便查看其行爲。我個人的機器是Core i7,主頻爲2.2 GHz,帶有4 GB RAM和5400轉硬盤。令人驚訝的是,該應用程序在我個人較弱的機器上快了兩倍。這是相同的輸入\相同的輸出。沒有IO但是爲了讀取XML來解析它們,我在終端上沒有打印任何內容,但是開始時間\結束時間&最終結果是一行

我非常好奇理解這種戲劇性能差異背後的原因。特別是來自硬件層面上較弱的機器。它是以更好的方式處理硬件的操作系統嗎?它是JVM工作更好嗎?

回答

9

在Windows上,默認安裝的JRE帶有HotSpot Client編譯器。該編譯器只進行基本的優化,與服務器HotSpot相反,後者執行更積極的優化並生成更快的代碼。服務器熱點是大多數類Unix和Linux發行版(包括Mac OS X)上的默認版本。這兩種編譯器之間的性能差異通常可能是2-3倍。客戶端HotSpot主要針對桌面應用程序的更快啓動進行優化,而不是針對長時間運行的進程的最佳性能。

要檢查你正在使用發出以下命令,編譯器:

java -version 

在我的機器它給出:

java version "1.6.0_45" 
Java (TM) SE Runtime Environment (build 1.6.0_45-b06) 
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode) 
         ^^^^^^ this 

要獲得服務器的HotSpot在Windows,你需要下載和安裝JDK然後用-server命令行開關運行程序。

+0

你好Piotr,你確定這一點。它會導致如此戲劇性的性能差異,並使功能更強大的機器性能更好。你認爲我應該用Linux發行版來取代Windows嗎?我投票贊成非常有益的信息。謝謝 – mowienay

+0

首先 - 檢查Windows機器上HotSpot編譯器的類型。表現差異可能還有其他原因,但這是我頭頂的東西。 –

+0

我確實喜歡你所說的話。使用服務器命令,它在我的桌面Windows機器上工作,就像我的個人MAC機器一樣。這是非常非常有益的建議。我很高興看到Server強大的機器上的性能。再次感謝你 – mowienay