Implikasi Prestasi toArray dengan Array Initialization
Soalan sama ada myList.toArray(new MyClass[myList.size()]) atau myList.toArray(MyClass baharu[0]) menawarkan prestasi yang lebih baik telah menimbulkan rasa ingin tahu di kalangan pembangun Java. Walaupun pendekatan kedua kelihatan lebih ringkas, andaian bahawa tatasusunan kosong diabaikan daripada penciptaan mungkin tidak selalunya benar.
Hasil Penanda Aras
Untuk menjelaskan perkara ini , penanda aras mikro telah dijalankan menggunakan Java HotSpot 8. Keputusan, yang dibentangkan di bawah, mendedahkan bahawa counterintuitive toArray(new Kaedah MyClass[0]) secara konsisten mengatasi prestasi toArray(MyClass baharu[myList.size()]) rakan sejawatannya:
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.preSize 1000 avgt 30 1.512 ▒ 0.031 us/op c.a.p.SO29378922.preSize 5000 avgt 30 6.884 ▒ 0.130 us/op c.a.p.SO29378922.preSize 10000 avgt 30 13.147 ▒ 0.199 us/op c.a.p.SO29378922.preSize 100000 avgt 30 159.977 ▒ 5.292 us/op c.a.p.SO29378922.resize 1 avgt 30 0.019 ▒ 0.000 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 c.a.p.SO29378922.resize 5000 avgt 30 5.318 ▒ 0.121 us/op c.a.p.SO29378922.resize 10000 avgt 30 10.652 ▒ 0.227 us/op c.a.p.SO29378922.resize 100000 avgt 30 139.692 ▒ 8.957 us/op
Penjelasan
Mesin Maya Java ( JVM) dan pengkompil JIT menggunakan pengoptimuman yang membolehkan mereka mencipta dan memulakan tatasusunan dengan saiz yang sesuai dengan cekap. Pengoptimuman ini tidak tersedia apabila tatasusunan dibuat secara manual.
Kesimpulan
Berdasarkan hasil penanda aras dan analisis lanjut yang dibentangkan dalam catatan blog Susun Kebijaksanaan the Ancients, adalah jelas bahawa myList.toArray(MyClass baharu[0]) adalah disyorkan pendekatan untuk situasi di mana prestasi menjadi kebimbangan. Overhed penciptaan tatasusunan kosong dihapuskan dengan berkesan oleh pengoptimuman JVM, menghasilkan prestasi yang lebih pantas.
Atas ialah kandungan terperinci `myList.toArray(MyClass baharu[myList.size()]) lwn. myList.toArray(MyClass[0] baharu): Manakah yang Menawarkan Prestasi Lebih Baik di Java?`. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!