Saya sedang mengembangkan game android dan saya punya pertanyaan tentang menyimpan elemen-elemen game tanpa menembakkan pengumpul sampah.
Gim saya membutuhkan koleksi tempat elemen gim disimpan menurut posisi x, y (semua elemen gim memiliki x, y, lebar dan tinggi). Koleksinya kemudian dipanggil setiap frame untuk mengambil elemen sesuai dengan cameraX, cameraY, lebar dan tinggi kamera (pengguna dapat menggulir di sekitar game).
Contoh:
function draw() {
tmp = collection.getElements(tmp,cameraX,cameraY,cameraWidth,cameraHeight);
for(int i = 0; i < tmp.size(); i++) {
tmp.get(i).draw();
}
}
Saat ini saya menggunakan kelas Vector untuk mewakili elemen koleksi, tetapi gc terus menyala setiap beberapa menit. Saya melakukan semua alokasi saya di muka. Saya juga memodifikasi fungsi getElements untuk menerima 1 parameter lagi - vektor temp (dialokasikan di muka) yang diisi dengan elemen dan kemudian dikembalikan.
Bagaimana saya harus menyimpan elemen-elemen game agar gc tidak bisa dinyalakan (saya lebih suka jika tidak mungkin)?
Saya juga menambahkan elemen ke koleksi selama runtime, apakah saya harus mengalokasikannya dimuka juga?
Saya juga menyarankan membaca kode sumber untuk Pulau Replica , yang dikembangkan oleh seorang insinyur Android. Dia memiliki kelas kumpulan objek generik yang dapat diperluas untuk kumpulan objek kustom. Ia juga memiliki kelas larik khusus (dengan kemampuan tambah / hapus / pencarian) untuk menghindari keharusan menggunakan iterator saat melintasi berbagai objek.
Juga ingin menyebutkan bahwa DDMS pada Android SDK di Eclipse dapat melacak alokasi memori (lihat tab Pelacak Alokasi pada gambar).
sumber