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 tatsächlichen 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 und schauen wir uns noch einmal die an Leistungsbewertung mit JMH und verbesserten Benchmarking-Strategien:
@OutputTimeUnit(TimeUnit.NANOSECONDS) @BenchmarkMode(Mode.AverageTime) @OperationsPerInvocation(StreamVsVanilla.N) public class StreamVsVanilla { public static final int N = 10000; static List<Integer> sourceList = new ArrayList<>(); static { for (int i = 0; i < N; i++) { sourceList.add(i); } } @Benchmark public List<Double> vanilla() { List<Double> 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<Double> 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 Die ersten Ergebnisse zeigen, dass der JMH-Benchmark deutlich zeigt, dass der traditionelle Sammlungsansatz in diesem speziellen Szenario deutlich schneller ist als der Stream-Ansatz.
Schlussfolgerung
Basierend auf diesem verbesserten Benchmarking Aus den Ergebnissen können wir schließen, dass:
Das obige ist der detaillierte Inhalt vonSind Streams für einfache Vorgänge immer langsamer als herkömmliche Sammlungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!