toArray(MyClass baharu[0]) atau toArray(New MyClass[myList.size()]) Implikasi Prestasi
Apabila menukar ArrayList kepada tatasusunan, pembangun boleh memilih antara dua menghampiri:
Manakala pilihan kedua kurang verbose, ia menimbulkan persoalan tentang kemungkinan pertimbangan prestasi.
Analisis Penanda Aras
Untuk menentukan kesan prestasi, penanda aras telah dijalankan menggunakan JMH pada Hotspot 8. Keputusan menunjukkan bahawa menggunakan tatasusunan kosong secara konsisten mengatasi prestasi presizing tatasusunan:
Benchmark (n) Mode Samples Score Error Units c.a.p.SO29378922.preSize 1 avgt 30 0.025 ▒ 0.001 us/op c.a.p.SO29378922.preSize 100 avgt 30 0.155 ▒ 0.004 us/op ... c.a.p.SO29378922.resize 100 avgt 30 0.133 ▒ 0.003 us/op c.a.p.SO29378922.resize 1000 avgt 30 1.075 ▒ 0.022 us/op ...
Penjelasan
Penemuan berlawanan intuitif ini boleh dikaitkan dengan pengoptimuman yang digunakan oleh pengkompil JVM dan JIT. Pengoptimuman ini membolehkan penciptaan dan permulaan tatasusunan bersaiz betul dengan cekap tanpa memerlukan dimensi yang dibekalkan pengguna.
Pengesyoran
Berdasarkan hasil penanda aras dan analisis, ia adalah disyorkan untuk menggunakan:
MyClass[] arr = myList.toArray(new MyClass[0]);
Ini bukan sahaja meningkatkan prestasi tetapi juga sejajar dengan prinsip membenarkan JVM mengoptimumkan operasi biasa seperti penciptaan tatasusunan.
Atas ialah kandungan terperinci `toArray(MyClass baharu[0]) lwn. toArray(MyClass baharu[myList.size()]): Manakah yang Lebih Berprestasi?`. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!