Java 8 Stream-Leistung vs. Traditionelle Sammlungen
Sie haben sich kürzlich an Java 8 gewagt und einen informellen Benchmark durchgeführt, um die Leistung seiner Stream-API mit klassischen Sammlungen zu vergleichen. Ihr Test umfasst das Filtern einer Liste von ganzen Zahlen, das Extrahieren der Quadratwurzel gerader Zahlen und das Speichern der Ergebnisse in einer Double-Liste. Sie stellen jedoch die Gültigkeit Ihres Tests in Frage und möchten unbedingt die wahren Auswirkungen auf die Leistung klären.
Bewertung des Benchmark-Tests
Ihre ersten Ergebnisse, die Streams anzeigten langsamer zu sein als Sammlungen, gab Anlass zur Sorge. Um eine zuverlässigere Bewertung zu gewährleisten, ist es wichtig, potenzielle Fehler zu beheben und einen fairen Test durchzuführen. Hier einige Überlegungen:
Richtige Benchmarking-Ergebnisse
Befolgen wir diese Empfehlungen noch einmal Leistungsbewertung mit JMH und verbessertes Benchmarking Strategien:
@OutputTimeUnit(TimeUnit.NANOSECONDS) @BenchmarkMode(Mode.AverageTime) @OperationsPerInvocation(StreamVsVanilla.N) public class StreamVsVanilla { public static final int N = 10000; static ListsourceList = new ArrayList(); static { for (int i = 0; i vanilla() { List result = new ArrayList(sourceList.size() / 2 1); for (Integer i : sourceList) { if (i % 2 == 0){ result.add(Math.sqrt(i)); } } return result; } @Benchmark public List stream() { return sourceList.stream() .filter(i -> i % 2 == 0) .map(Math::sqrt) .collect(Collectors.toCollection( () -> new ArrayList(sourceList.size() / 2 1))); } }
Ergebnisse:
Benchmark Mode Samples Mean Mean error Units StreamVsVanilla.stream avgt 10 17.588 0.230 ns/op StreamVsVanilla.vanilla avgt 10 10.796 0.063 ns/op
Ergebnisse
Im Gegensatz zu den ersten Ergebnissen zeigt der JMH-Benchmark deutlich, dass der traditionelle Erfassungsansatz deutlich schneller ist als der Stream-Ansatz in diesem speziellen Fall Szenario.
Schlussfolgerung
Basierend auf diesen verbesserten Benchmarking-Ergebnissen können wir schließen, dass:
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3