2013-09-25 26 views
7

Ho sviluppato un'applicazione java su un piccolo desktop di Windows che analizza i file XML. Ho incontrato un'osservazione molto interessante di cui sono molto curioso.Applicazione Java Windows vs Mac OS X

Ho prodotto un jar eseguibile per la mia applicazione e l'ho eseguito su un computer Windows Server che è molto potente. Ha 2 processori fisici Xeon ogni 8 core con clock a 2.7 GHz, 50GB RAM e 7200 RPM HDD. La macchina era inattiva quando ho avviato la mia applicazione e sono abbastanza sicuro che nessun'altra applicazione abbia condiviso la macchina con me.

In seguito, eseguivo l'eseguibile sul mio Macbook Pro per il gusto di vedere il suo comportamento. La mia macchina personale è Core i7 con clock a 2.2 GHz con 4 GB di RAM e 5400 RPM HDD.

Sorprendentemente, l'applicazione è stata due volte più veloce sulla mia macchina più debole personale. Era lo stesso input \ stesso output. No IO ma per leggere gli XML per analizzarli, non stampo nulla sul Terminale ma Start Time \ End Time & Risultato finale che è una riga

Sono molto curioso di capire la ragione di una differenza di prestazioni così drammatica. Specialmente da una macchina più debole al livello dell'hardware. È il sistema operativo che gestisce l'hardware in un modo migliore? JVM funziona meglio ?.

risposta

9

Nelle installazioni Windows di default di JRE viene fornito il compilatore del client HotSpot. Questo compilatore esegue solo ottimizzazioni di base, contrariamente al server HotSpot che esegue ottimizzazioni più aggressive e produce codice molto più veloce. Server HotSpot è di default sulla maggior parte delle distribuzioni Linux e Unix, incluso Mac OS X. La differenza di prestazioni tra questi due compilatori può essere spesso di 2-3 volte. Il client HotSpot è ottimizzato principalmente per l'avvio più rapido delle applicazioni desktop, non per le massime prestazioni dei processi di lunga durata.

Per verificare quale compilatore si sta utilizzando il seguente comando problema:

java -version 

Sulla mia macchina si dà:

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 

Per ottenere Server HotSpot su Windows, è necessario scaricare e installare il JDK e quindi eseguire il programma con l'interruttore della riga di comando -server.

+0

Ciao Piotr, sei sicuro di questo. comporterebbe una differenza di prestazioni così drammatica e renderebbe molto meglio la macchina molto meno potente. Pensi che dovrei sostituire Windows con una distribuzione Linux ?. Ho votato per ringraziarti per le informazioni molto vantaggiose. Grazie – mowienay

+0

Prima - basta controllare il tipo di compilatore HotSpot su quella macchina Windows. Potrebbero esserci anche altri motivi per le differenze di rendimento, ma questo era qualcosa che mi passava per la testa. –

+0

Mi è piaciuto quello che hai detto. Ho usato l'ordine del server e ha funzionato sulla mia macchina windows desktop come il mio mac personale. Questo è stato un consiglio molto molto utile. Sono molto entusiasta di vedere le prestazioni sulla potente macchina del server. Grazie ancora – mowienay