Instanceof Performance in Java
Apabila berurusan dengan warisan di Java, pembangun sering menghadapi persoalan sama ada menggunakan instanceof operator memberi kesan kepada prestasi. Walaupun difahamkan bahawa reka bentuk berorientasikan objek berusaha untuk meminimumkan contoh penggunaan, pertanyaan ini hanya menumpukan pada implikasi prestasinya.
Dalam senario biasa, kelas asas dengan berbilang subkelas wujud dan fungsi yang beroperasi pada kelas asas melakukan instanceof semakan pada setiap subkelas. Pendekatan alternatif melibatkan penggunaan primitif integer "ID jenis" dengan bitmask untuk pengkategorian subkelas. Pendekatan ini menimbulkan persoalan sama ada JVM mengoptimumkan instanceof untuk kelajuan yang lebih tinggi.
Hasil Penandaarasan
Untuk menilai pilihan pelaksanaan yang berbeza, program penanda aras telah dicipta. Pilihan termasuk:
Langkah-langkah penanda aras purata masa pelaksanaan setiap pilihan melebihi 10,000 lelaran.
Analisis Prestasi
Hasilnya menunjukkan bahawa dalam Java 1.8, instanceof ialah pendekatan terpantas, dengan getClass() menjadi sekejap dekat. Berikut ialah ringkasan:
Operation | Runtime | Relative to instanceof |
---|---|---|
INSTANCEOF | 39,598 ns/op | 100.00% |
GETCLASS | 39,687 ns/op | 100.22% |
TYPE | 46,295 ns/op | 116.91% |
OO | 48,078 ns/op | 121.42% |
Kesimpulan
Dalam Java 1.8, instanceof mewakili pendekatan terpantas untuk menyemak kejadian kelas. Walaupun getClass() berprestasi setanding, pendekatan alternatif seperti TYPE dan warisan berorientasikan objek dikenakan sedikit penalti prestasi. Pembangun yang mencari prestasi optimum harus mengutamakan contoh berbanding pilihan lain.
Atas ialah kandungan terperinci Adakah instanceof Benar-benar Lambat di Jawa? Kajian Penandaarasan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!