Java 8: ストリームとコレクションのパフォーマンス分析
Java 8 に最近導入されたストリーム API のパフォーマンスを従来のコレクション アプローチと比較して評価する開発者にとって重要な側面です。洞察を提供するために、最初のベンチマークが実施されました。その結果、これら 2 つの方法の比較有効性について疑問が生じました。
ベンチマークの設定と結果
ベンチマークには、かなりの量のフィルタリングが含まれていました。整数のリストと偶数の平方根を計算し、結果を Double のリストに格納します。以下のコード スニペットは、実装を示しています。
<code class="java"> // Source list initialization List<Integer> sourceList = new ArrayList<>(); for (int i = 1; i < 1000000; i++) { sourceList.add(i); } // Collections approach List<Double> resultCollection = new LinkedList<>(); long startTimeCollection = System.nanoTime(); // Iterate through the list and perform calculations for (Integer i : sourceList) { if (i % 2 == 0) { resultCollection.add(Math.sqrt(i)); } } long elapsedTimeCollection = System.nanoTime() - startTimeCollection; // Stream approach Stream<Integer> stream = sourceList.stream(); long startTimeStream = System.nanoTime(); // Filter even numbers and calculate square roots resultStream = stream.filter(i -> i % 2 == 0) .map(i -> Math.sqrt(i)) .collect(Collectors.toList()); long elapsedTimeStream = System.nanoTime() - startTimeStream; // Parallel stream approach stream = sourceList.stream().parallel(); long startTimeParallelStream = System.nanoTime(); resultParallelStream = stream.filter(i -> i % 2 == 0) .map(i -> Math.sqrt(i)) .collect(Collectors.toList()); long elapsedTimeParallelStream = System.nanoTime() - startTimeParallelStream;</code>
デュアルコア マシンでの結果から、次のことが明らかになりました。
ベンチマーク結果の分析
これらの最初の調査結果に基づいて、当初はストリームはコレクションよりも遅く、並列処理でもパフォーマンスを向上させることができないと結論付けられました。ただし、採用されたベンチマーク手法には潜在的な欠陥に関する懸念が生じました。
パフォーマンス検証の改善
これらの懸念に対処するために、ベンチマークは次の改良点で改訂されました。
更新されたベンチマーク結果
改訂されたベンチマークにより次の結果が得られました:
この改訂されたベンチマークでは、最初の調査結果とは異なり、ストリームがコレクションを上回りました。ストリーム アプローチの実行時間の高速化は、JIT 最適化とコンパイラーによるコード生成の改善によるものと考えられます。
結論
これらの最新の調査結果に基づくと、次のようになります。 Java 8 のストリームは、従来のコレクションと比較して、コーディングの利便性とパフォーマンスの向上の両方を提供すると結論付けています。ストリームが常に優れているわけではありませんが、ストリームを使用するとコードが大幅に簡素化され、多くのシナリオで効率が向上します。
ベスト プラクティス
ストリームの利点を効果的に活用するには、次の点を考慮してください。以下のベストプラクティス:
以上がパフォーマンスが重要なシナリオでは、Java 8 の Streams API は従来のコレクションよりも高速ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。