Java 8: Analisis Prestasi Streams vs Collections
Menilai prestasi Streams API yang diperkenalkan baru-baru ini dalam Java 8 berbanding dengan pendekatan Collections tradisional adalah aspek penting bagi pembangun. Untuk memberikan pandangan, penanda aras awal telah dijalankan, yang menimbulkan persoalan tentang keberkesanan perbandingan kedua-dua kaedah ini.
Penetapan dan Penemuan Penanda Aras
Penanda aras melibatkan penapisan yang besar senarai integer dan mengira punca kuasa dua nombor genap, menyimpan keputusan dalam senarai Double. Coretan kod di bawah menggambarkan pelaksanaan:
<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>
Hasil pada mesin dwi-teras mendedahkan bahawa:
Analisis Keputusan Penanda Aras
Berdasarkan penemuan awal ini, pada mulanya disimpulkan bahawa aliran lebih perlahan daripada koleksi, malah keselarian gagal meningkatkan prestasi. Walau bagaimanapun, metodologi penanda aras yang digunakan menimbulkan kebimbangan tentang kemungkinan kelemahan.
Pengesahan Prestasi yang Dipertingkat
Untuk menangani kebimbangan ini, penanda aras telah disemak dengan penambahbaikan berikut:
Keputusan Penanda Aras Kemas Kini
Penanda aras yang disemak menghasilkan keputusan berikut:
Dalam penanda aras yang disemak ini, strim mengatasi prestasi koleksi, bertentangan dengan penemuan awal. Masa pelaksanaan pendekatan strim yang lebih pantas boleh dikaitkan dengan pengoptimuman JIT dan penjanaan kod yang lebih baik oleh pengkompil.
Kesimpulan
Berdasarkan penemuan yang dikemas kini ini, ia boleh membuat kesimpulan bahawa aliran dalam Java 8 menawarkan kemudahan pengekodan dan peningkatan prestasi jika dibandingkan dengan koleksi tradisional. Walaupun strim tidak selalu unggul, penggunaannya boleh memudahkan kod dan meningkatkan kecekapan dengan ketara dalam banyak senario.
Amalan Terbaik
Untuk memanfaatkan faedah strim dengan berkesan, pertimbangkan mengikuti amalan terbaik:
Atas ialah kandungan terperinci Adakah API Aliran Java 8 lebih pantas daripada Koleksi tradisional dalam senario kritikal prestasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!