Bagian "Hindari Enums Di Mana Anda Hanya Membutuhkan Ints" telah dihapus dari dokumentasi pengembang resmi . (Lihat Mengapa Android tidak menggunakan lebih banyak enums? Untuk konten bagian lama)
Mengapa? Apakah ada perubahan dalam VM Android yang membuat ujungnya usang?
Jawaban:
versi asli dari dokumen itu hanyalah banyak prasangka. itu telah ditulis ulang untuk hanya berisi fakta yang didukung oleh tolok ukur yang sebenarnya, dan diperbarui ketika VM diperbarui. Anda dapat menemukan berbagai tolok ukur - ditambah beberapa tolok ukur yang kami gunakan untuk mengoptimalkan perpustakaan inti - di http://code.google.com/p/dalvik/ .
sumber
Tebakan:
Jadi, untuk persyaratan yang relatif biasa dari aplikasi GUI, manfaat waktu pengembangan enum jauh lebih besar daripada biaya runtime tambahan.
sumber
Elliott Hughes menawarkan rincian lebih lanjut tentang penulisan ulang dokumentasi di blognya: http://elliotth.blogspot.com/2010/09/java-benchmarks.html
Paruh kedua pos menjelaskan bahwa setiap klaim pada dokumen Performa sekarang didukung dengan tolok ukur. Versi sebelumnya dari dokumen tersebut ternyata berisi klaim yang tidak diverifikasi, seperti, "Hindari enum karena terlalu mahal."
sumber
Jawaban 2011 dari Elliot Hugues mengatakan bahwa alasan awal untuk menghindari enum adalah karena alasan kinerja ... seperti dalam "kinerja pemrosesan". Karena alasan ini tidak didukung oleh fakta, itu dihapus dari dokumentasi resmi.
Ini telah ditambahkan kemudian karena enum menambahkan lebih banyak data dalam memori daripada menggunakan integer.
sumber
IntDef
anotasi, yang memungkinkan untuk menggunakan konstanta int dengan aman dengan kesalahan dan peringatan Android Studio. blog.shamanland.com/2016/02/int-string-enum.htmlTLDR: Dalvik tidak bagus dengan alokasi memori dan
Enum
menggunakan lebih banyak memori daripadaint
. Android Lollipop menggantikan Dalvik dengan ART yang tidak menderita keterbatasan yang sama. Dengan demikian rekomendasi ini tidak relevan lagi.Jawaban panjangnya:
Wow! 8 tahun, 5 jawaban dan banyak komentar kemudian alasan sebenarnya masih belum diatasi.
Pada masa pra-lolipop Android, Dalvik adalah proses yang digunakan VM. Karena sejumlah kecil memori tersedia untuk aplikasi untuk digunakan selama waktu itu, Dalvik memiliki banyak kendala memori. Untuk alokasi memori Dalvik harus berjalan tumpukan dan menemukan ruang. Heap juga akan terfragmentasi dari waktu ke waktu. Dalvik tidak bisa defragment, sehingga akan mengalokasikan dari waktu ke waktu dan akhirnya kehabisan ruang.
berasal dari hari-hari Dalvik karena
Enum
jauh lebih besar daripadaint
dan alokasi memori sangat mahal.Maju cepat hari ini, Dalvik telah digantikan oleh ART. ART keluar di KitKat dan default sejak Lollipop.
ART dibuat dari bawah ke atas bukan untuk mengoptimalkan memori tetapi untuk mengoptimalkan kinerja. Itu juga dioptimalkan untuk alokasi dan koleksi. Alasannya karena memiliki memori yang disisihkan untuk objek besar. Alih-alih meletakkan segala sesuatu di tumpukan yang sama, dan kemudian harus menemukan ruang untuk benda besar di tengah semua benda kecil, ART menempatkan semua benda besar dan bitmap di tumpukan terpisah. Dan kemudian benda-benda kecil pergi di tumpukan terpisah. Itu juga bisa defragment.
Setelah ART, jika Anda menggunakan
Enum
Android tidak peduli dan inilah sebabnya rekomendasinya hilang sekarang.Ini datang dari Chet Haase di Google. Saya sarankan mencari Google I / O bicara dan menonton seluruh video. Ini berisi banyak informasi berguna dan wawasan tentang Android.
sumber
Masih buruk untuk kinerja memori.
https://developer.android.com/training/articles/memory.html#Overhead
EDIT: Sekarang sudah dihapus. Aman digunakan enum.
sumber