Ini sepertinya pertanyaan sederhana, tetapi setelah banyak membaca tentang masalah ini, saya masih belum menemukan jawaban yang pasti (mungkin karena itu sangat sederhana).
Pertanyaan saya adalah ini: ketika seorang pemulung mengumpulkan benda-benda di tumpukan, bagaimana referensi ke benda-benda di tumpukan diperbarui? Saya dapat memikirkan dua solusi yang mungkin:
- Pergi melalui tumpukan (dan referensi di tumpukan) dan perbarui referensi untuk menunjuk ke lokasi baru objek. Dalam analogi dengan pindah, ini seperti mengirim surat kepada siapa pun yang memiliki alamat Anda dan meminta mereka untuk memperbarui buku alamat mereka dengan alamat baru Anda.
- Berikan semacam tabel pencarian. Ini seperti meninggalkan alamat penerusan dengan kantor pos setempat.
Apakah pemulung secara dominan menggunakan salah satu dari dua metode ini? Beberapa metode lain? Kedua?
garbage-collection
todorojo
sumber
sumber
Jawaban:
Saya tidak memiliki keahlian khusus dalam hal ini, tetapi pemahaman saya adalah bahwa metode pertama umumnya digunakan.
Pengumpul sampah harus menganalisis tumpukan apa pun untuk menemukan hal-hal apa di tumpukan yang dirujuk dari tumpukan. Begitu ia memutuskan untuk memindahkan sesuatu, ia harus memperbaiki referensi untuk itu, dan tidak ada alasan untuk membedakan antara tumpukan dan tumpukan pada titik itu.
Pendekatan tabel pencarian pada prinsipnya bisa berhasil. Namun itu akan membuat semua akses pointer perlu mengambil 2 langkah. Itu akan menjadi dampak kinerja yang sangat besar pada waktu lari normal. Khususnya untuk kasus penggunaan banyak benda kecil. (Yang merupakan kasus di mana program-program GC canggih biasanya mengalahkan penghitungan referensi.)
sumber