Rumah  >  Artikel  >  Java  >  Perbandingan berasaskan penanda aras bagi fungsi Java

Perbandingan berasaskan penanda aras bagi fungsi Java

王林
王林asal
2024-04-20 14:39:011012semak imbas

Alat penanda aras JMH boleh digunakan untuk membandingkan prestasi fungsi Java. Menanda aras dua fungsi yang menjumlahkan tatasusunan, didapati bahawa fungsi penstriman Java (sumArray2) adalah lebih baik daripada fungsi gelung asli (sumArray1) kerana ia mengambil kesempatan daripada penyejajaran dan dengan itu menunjukkan prestasi yang lebih baik pada tatasusunan besar.

Perbandingan berasaskan penanda aras bagi fungsi Java

Perbandingan Fungsi Java Berasaskan Penanda Aras

Prestasi ialah pertimbangan utama semasa menulis kod Java. Dengan menanda aras fungsi yang berbeza, kita boleh menentukan fungsi yang berprestasi terbaik dalam senario tertentu.

Penanda aras dengan JMH

Java Microbenchmark Suite (JMH) ialah perpustakaan popular untuk penanda aras di Jawa. Ia menyediakan API yang mudah digunakan untuk membuat penanda aras dan mengukur masa pelaksanaan.

Perbandingan Fungsi Java dalam Tindakan

Mari kita bandingkan dua fungsi yang menjumlahkan elemen pada tatasusunan:

// 方法 1:原生循环
public static int sumArray1(int[] arr) {
    int sum = 0;
    for (int i = 0; i < arr.length; i++) {
        sum += arr[i];
    }
    return sum;
}

// 方法 2:Java 流
public static int sumArray2(int[] arr) {
    return Arrays.stream(arr).sum();
}

Menyediakan penanda aras JMH

Menyediakan penanda aras dengan JMH adalah sangat mudah. Berikut ialah contoh kod konfigurasi JMH:

@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public class SumArrayBenchmark {

    @Benchmark
    public int sumArray1() {
        int[] arr = new int[10000];
        // 填充数组
        return sumArray1(arr);
    }

    @Benchmark
    public int sumArray2() {
        int[] arr = new int[10000];
        // 填充数组
        return sumArray2(arr);
    }
}

Jalankan penanda aras JMH

Untuk menjalankan penanda aras JMH, gunakan arahan berikut:

mvn clean install
java -jar target/benchmarks.jar

Arahan ini akan mencetak hasil penanda aras, menunjukkan masa pelaksanaan setiap fungsi .

Analisis Keputusan

Dalam contoh di atas, fungsi aliran Java sumArray2 的性能优于原生循环函数 sumArray1. Ini kerana aliran Java mengambil kesempatan daripada penyejajaran, dan faedah prestasi lebih ketara terutamanya dengan tatasusunan yang besar.

Kesimpulan

Dengan menanda aras dengan JMH, kita boleh membandingkan prestasi fungsi Java dengan mudah dan menentukan fungsi mana yang paling cekap dalam senario tertentu.

Atas ialah kandungan terperinci Perbandingan berasaskan penanda aras bagi fungsi Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn