Java 8 ストリームのパフォーマンスと従来のコレクション
あなたは最近 Java 8 に挑戦し、そのストリーム API のパフォーマンスを従来のコレクションと比較する非公式のベンチマークを実施しました。テストには、整数のリストのフィルター処理、偶数の平方根の抽出、結果の Double リストへの保存が含まれます。しかし、あなたはテストの妥当性を疑問視しており、実際のパフォーマンスへの影響を明らかにしたいと考えています。
ベンチマーク テストの評価
ストリームを示した最初の結果コレクションよりも遅いという懸念が生じました。より信頼性の高い評価を保証するには、潜在的なエラーに対処し、公正なテストを実施することが不可欠です。
適切なベンチマーク結果
これらの推奨事項に従って、 JMH を使用したパフォーマンス評価と改善されたベンチマーク戦略:
@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))); } }
結果:
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
Findings
最初の結果とは対照的に、JMH ベンチマークは、従来の収集アプローチが従来の収集アプローチよりも大幅に高速であることを明確に示しています。
結論
これらの改善されたベンチマーク結果に基づいて、次のように結論付けることができます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3