2015-10-09 26 views
11

Ich entwickle eine Bildverarbeitung Java 7u80-Anwendung mit C++ - Bibliotheken über JNI.Java 8 Leistung VS. Java 7

Da ich mit Java 8u60 zu execute streams in parallel bereit war, wechselte ich einfach zu JDK 8 und startete alle meine Komponententests neu.

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

Java 7 ist in meinem Fall 17% schneller als Java 8 (gleicher Code, Code-Ebene resp. 7 und 8).

  1. Ich frage mich, ob solche Ergebnisse für meine Anwendung spezifisch sein können oder wenn andere bereits eine Herabstufung der Leistungsform Java 7 auf 8 bemerken?
  2. Gibt es eine besondere Optimierung im Code, um das Beste aus Java 8 zu erhalten?

Wenn nichts getan werden kann, würde ich dann implementieren eher die Multithreading-Code mit Java 7 statt 8, die Performance-Gewinn zu halten ich mit Java haben bereits 7.

+2

parallele Ströme verwendet, wird langsamer sein, wenn richtig eingesetzt. Angenommen, Ihre Unit-Tests laufen nicht [jmh] (http://openjdk.java.net/projects/code-tools/jmh/), können Sie die Zahlen vollständig ignorieren. –

+2

@BoristheSpider Ich glaube, der OP hat noch keinen Stream benutzt, er hat nur den Wechsel der JDK-Version gemacht und sofort die Änderung der Gesamtdauer bemerkt. –

+0

@ Jean-FrançoisSavard in diesem Fall gilt nur der zweite Teil meines Kommentars. –

Antwort

6

Gestartet 21 SOAPUI (Parallel) -Tests gegen WLS 12.1.3 läuft resp. Java 7u51 (*) und Java 8u60 in meiner Testumgebung.

Testergebnisse unten (Screenshots enthalten im Fall von).

Fassen wir zusammen: SOAPUI Zeit einfach die Ausführungszeit für jeden Durchgang, während
die JMX Zeit (kumulativ zwischen jedem Durchlauf) SOAPUI ist, ist die Zeit auf dem kritischen Teil meiner Anwendung zu verbringen.
Die JMX-Metriken sind die Rechenzeit (die ich versuche zu minimieren). Ich werde mich nicht auf die SOAPUI-Metrik verlassen, da ich nicht weiß, wie genau es berechnet wird
Gemäß SOAPUI war JDK 7u51 6.7% schneller als JDK 8u60.
Gemäß JMX war JDK 7u51 15.6% schneller als JDK 8u60.

Letztere bestätigen (für mich) den in meinen Unit Tests beobachteten Trend - gleiches Ergebnis. Obwohl diese Tests wahrscheinlich nicht zur Bewertung einer JVM-Leistung verwendet werden, denke ich, dass es in meinem Fall besser ist, auf JDK7 zu bleiben, da in meinem Fall der Leistungsaspekt wichtig ist.

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]
TOTAL 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]
TOTAL SOAPUI: 73'560 [ms](JMX: 59'172 [ms])

(*): keine Zeit Java 7u60 wie in meinem Unit-Test zu installieren

Screenshots

enter image description here

+0

Der wirkliche Vorteil der Leistung von Java 8 gegenüber 7 liegt im Multithreading, sagen wir das Fork-Join-Modell. Das Bild ist eine nette Idee, obwohl es zu klein ist, um die Werte zu schätzen. – another