2015-10-09 28 views
11

Sto sviluppando un'applicazione Java 7u80 per l'elaborazione delle immagini utilizzando le librerie C++ tramite JNI.Prestazioni Java 8 VS. Java 7

Come ero disposto a execute streams in parallel con Java 8u60, ho appena passato a JDK 8 e rilanciato tutti i miei test di unità.

Java 8u60 Overall duration: **35'408 [ms]**
Java 7u80 Overall duration: **29'581 [ms]**

Java 7 è nel mio caso il 17% più veloce di Java 8 (stesso codice, livello di codice risp. 7 e 8).

  1. Mi chiedevo se tale risultato potrebbe essere specifico per la mia applicazione o se altri hanno già notato un downgrade delle prestazioni in movimento da Java 7 a 8?
  2. C'è qualche ottimizzazione da fare nel codice per ottenere il meglio da Java 8?

Se nulla può essere fatto, avrei allora piuttosto implementare il codice multithreading con Java 7 anziché 8, per mantenere il guadagno di prestazioni ho già con Java 7.

+2

Uso flussi paralleli sarà più lento se non usato correttamente. Supponendo che i tuoi test unitari non siano in esecuzione [jmh] (http://openjdk.java.net/projects/code-tools/jmh/) puoi ignorare completamente i numeri. –

+2

@BoristheSpider Credo che l'OP non abbia ancora utilizzato lo streaming, ha appena fatto il passaggio alla versione JDK e ha immediatamente notato il cambiamento nella durata complessiva. –

+0

@ Jean-FrançoisSavard in tal caso si applica solo la seconda parte del mio commento. –

risposta

6

Lanciato 21 SoapUI (parallela) test contro WLS 12.1.3 in esecuzione risp. Java 7u51 (*) e Java 8u60 sul mio ambiente di test.

Risultati dei test di seguito (schermate incluse in caso di).

In sintesi: il tempo SoapUI è semplicemente il tempo di esecuzione SoapUI per ogni passaggio, mentre
il tempo JMX (cumulativa tra ogni passata) è il tempo speso per la parte critica della mia applicazione.
Le metriche JMX sono il tempo di calcolo (quello che tento di minimizzare). Non mi affiderò alla metrica SOAPUI poiché non so come sia calcolata esattamente

Come per SOAPUI, JDK 7u51 era 6,7% più veloce di JDK 8u60.
Secondo JMX, JDK 7u51 era 15.6% più veloce di JDK 8u60.

Quest'ultimo conferma (per me) la tendenza osservata nei miei test di unità - stesso risultato. Nonostante questi test non siano probabilmente quelli da utilizzare per valutare le prestazioni della JVM, suppongo che nel mio caso sia preferibile rimanere su JDK7, perché nel mio caso l'aspetto delle prestazioni è importante.

Java 7
Pass1SOAPUI: 22'324 [ms] - JMX :16'286 [ms]
Pass2SOAPUI: 24'129 [ms] - JMX :33'510 [ms]
Pass3SOAPUI: 22'170 [ms] - JMX :49'923 [ms]
TOTALE SOAPUI: 68'623 [ms](JMX: 49'923 [ms])

Java 8
Pass1SOAPUI: 25'150 [ms] - JMX :19'767 [ms]
Pass2SOAPUI: 24'564 [ms] - JMX :39'702 [ms]
Pass3SOAPUI: 23'846 [ms] - JMX :59'172 [ms]
TOTALE SOAPUI: 73'560 [ms](JMX: 59'172 [ms])

(*): il tempo di installare Java 7u60 come nel mio unità di prova

Screenshots

enter image description here

+0

Il vero vantaggio sulle prestazioni di Java 8 rispetto a 7 è il multithreading, ad esempio il modello Fork-Join. L'immagine è una bella idea, anche se è troppo piccola per apprezzare i valori. – another