Penggunaan Koleksi dalam Pengembangan Game Android tidak dianjurkan?

10

Saat bekerja pada proyek game untuk Android saya sedang menggali untuk beberapa informasi tentang optimasi kinerja untuk kode game. Dan saya jadi tahu bahwa penggunaan Java Collections seperti List, Arraylist dll tidak dianjurkan dalam kode permainan, meskipun koleksi adalah alat yang berguna dalam pemrograman Java. Mengapa begitu? Saya ingin mengetahui detail teknis seberapa besar dampak kerangka kerja Collection terhadap sistem Android dan mengapa? Bantuan apa pun dalam hal ini akan luar biasa.

GamDroid
sumber
Dimana Anda membaca itu?
egarcia
mungkin di sini: developer.android.com/guide/practices/design/performance.html Perhatikan bagaimana katanya: Untuk meringkas: gunakan loop ditingkatkan untuk secara default, tetapi pertimbangkan loop terhitung tulisan tangan untuk iterasi ArrayList yang kritis terhadap kinerja.
Nailer

Jawaban:

8

Sebagian besar tentang alokasi memori dan pengumpulan sampah. Alokasi memori selama runtime memberi pemulung Anda peluang untuk mengeluarkan sampah. Yang menyakitkan kinerja Anda. GC harus terjadi sesering mungkin.

Sebagian besar koleksi java:

A) Alokasikan lebih banyak memori daripada yang mereka butuhkan.

B) Alokasikan memori ketika Anda tidak menginginkannya.

C) Alokasikan memori untuk setiap iterator saat iterasi melalui koleksi.

Untuk menghindari hal-hal ini:

A) Mengalokasikan koleksi dengan ukuran tetap. yaitu. buat kumpulan objek.

B) Alokasikan pool ini di init program.

C) Hindari metode for (Object obj: collection) untuk tipe-tipe koleksi yang memiliki ukuran () dan .get (int index).

Nailer
sumber
2
Semua poin yang valid, tetapi perlu diingat: "Kita harus melupakan efisiensi kecil, katakanlah sekitar 97% dari waktu: optimasi prematur adalah akar dari semua kejahatan". Anda harus membatasi pengoptimalan tersebut ke tempat-tempat di mana mereka benar-benar diperlukan. Di semua tempat lain, perselisihan untuk desain yang jelas dan sederhana.
Michael Klement
@Michael: Pada sistem saat ini, dengan cache cepat dan memori lambat dan banyak core, alokasi memori adalah hal termahal yang dapat Anda lakukan.
2
@Michael: Anda akan kesulitan menemukan mesin permainan komersial berperforma tinggi yang tidak melakukan sebanyak yang mereka bisa untuk mengoptimalkan pola alokasi memori mereka. Berikut ini pembicaraan panjang tentang masalah game android realtime. Ini agak tua, tetapi sebagian besar masih berlaku: youtube.com/watch?v=U4Bk5rmIpic
Nailer
Tentu, jangan salah paham: Saya tidak ingin tidak setuju dengan jawaban Anda. Saya hanya ingin menunjukkan bahwa Anda harus mengoptimalkan secara bijaksana dan di tempat yang tepat. Tidak ada manfaat menggunakan Array di Koleksi di tempat yang memiliki dampak minimal pada kinerja (katakanlah 1%). (Juga dibahas lebih lanjut di sini: developer.android.com/guide/practices/design/… )
Michael Klement
3
@AttackingHobo: Saya tidak setuju. Mengoptimalkan secara membabi buta bukanlah sesuatu yang bermanfaat, seperti itulah pernyataan Anda bagi saya (koreksi saya jika saya salah). Chris Pruett juga menyatakan di Google IO Video yang ditautkan di atas: "Pilih kelenturan daripada kecepatan setiap hari dalam seminggu ... sampai gameplaynya rusak." dan saya setuju dengan ini.
Michael Klement