Koleksi sampah harus mengunjungi semua benda yang hidup, sehingga dapat menemukan memori yang dapat direklamasi. (Memiliki banyak generasi hanya menunda ini sedikit)
Semua hal yang sama, jelas lebih baik untuk pertama mengunjungi objek yang sudah di-paging ke RAM, sebelum paging blok lain dan karena itu paging keluar beberapa objek.
Kemungkinan lain adalah bahwa ketika OS ingin mengambil halaman ram dari proses, GC pertama kali ditanya apakah ia memiliki halaman yang dapat diberikan tanpa perlu paging out. GC mungkin sebagian besar dilakukan dengan memindahkan objek dari sebuah halaman, jadi dapat menghapus halaman itu dalam batas waktu yang dimiliki OS untuk membutuhkan sebuah halaman.
Namun, saya tidak dapat mengingat pengumpul sampah yang terintegrasi dengan sistem paging OS yang menggerakkan urutan GC bekerja.
sumber
Jawaban:
Seingat saya, copy collector seharusnya ramah paging, karena penelusuran dengan menyalin cenderung meningkatkan lokalitas referensi pointer. Ini memiliki efek positif pada program (mutator) yang akan menyebabkan lebih sedikit kesalahan halaman saat mengikuti tautan, dan juga akan meningkatkan siklus pengumpulan berikutnya karena pelacakan juga akan menyebabkan lebih sedikit kesalahan halaman. Agenda penelusuran (petunjuk mana yang harus diproses terlebih dahulu) dapat berdampak pada efektivitas untuk meningkatkan lokalitas data. Ini dapat ditingkatkan dengan mengukur statistik pada jumlah akses ke berbagai petunjuk dalam berbagai jenis sel.
Sekarang, jika Anda mempertimbangkan kolektor pelacak secara umum, Anda biasanya harus memelihara struktur yang melacak pointer yang belum dilacak. Dimungkinkan untuk mengatur struktur ini sehingga semua pointer yang menunggu yang menunjuk pada halaman yang sama akan disimpan bersama (meskipun itu mungkin membutuhkan lebih banyak ruang, dalam beberapa kasus, tergantung pada teknik yang tersedia untuk menyimpan daftar pointer tersebut). Kebijakan yang memungkinkan adalah selalu melacak terlebih dahulu set pointer menunggu terbesar yang menunjuk ke halaman yang sama, ketika tidak ada pointer menunggu yang tersisa ke halaman dalam memori.
Mengenai pertanyaan di paragraf ketiga, yang ditambahkan setelah saya menjawab, koleksi salinan lagi merupakan jawaban. OS dapat mengurangi jumlah halaman fisik yang dialokasikan pada waktu pengumpulan, karena halaman sepenuhnya dibebaskan. Dengan tanda dan penyapu kolektor, acara satu halaman penuh bebas mungkin jauh lebih jarang, sehingga tidak layak menjadi machanism tertentu untuk dipertimbangkan.
Gagasan semacam ini alami, dan mungkin dijelaskan dalam beberapa makalah. Tapi saya tidak mengingatnya begitu saja. Saya pikir makalah awal tentang Lisp GC berisi beberapa ide ini (seperti: apakah mobil atau cdr harus diikuti terlebih dahulu?).
Kabar baiknya dalam peran koleksi-salinan ini adalah juga paging ramah untuk menyalin koleksi karena menambah ruang penyimpanan yang tersedia. Ingat bahwa kolektor salinan pada prinsipnya membutuhkan ruang dua kali lebih banyak dari yang digunakan untuk penyimpanan data aktual. Sekarang, efek paging tergantung juga pada ruang alamat mesin, dan memori fisik yang tersedia. Di komputer lama, memori fisik jauh lebih sedikit daripada ruang alamat yang tersedia, sehingga paging benar-benar bonus ruang, memungkinkan kebijakan seperti menyalin GC. Bahkan ketika ruang fisik sebesar ruang alamat, orang mungkin ingin membagikannya, sehingga proses menggunakan GC akan memiliki lebih sedikit ruang alamat tanpa paging (lihat paging). Kata-kata ini agak digantikan oleh penggunaan kolektor generasi. Mereka umumnya menggunakan koleksi salinan untuk generasi muda justru karena kualitas-kualitas ini, dan karena generasi muda kebanyakan berumur pendek.
Kemudian Anda memiliki semua interaksi GC generasi dengan sistem cache, yang telah dibahas dalam pertanyaan sebelumnya: Apakah pengumpul sampah generasi pada dasarnya ramah terhadap cache?
Untuk informasi lebih lanjut tentang masalah ini, saya akan mencari di web dengan, misalnya, pengumpulan dan penempatan sampah kata kunci .
sumber
Emery Berger, Matthew Hertz & Yi Feng melakukan beberapa hal dalam hal ini.
Ini adalah video ceramah Emery tentang itu, dan dia menulis makalah Koleksi Sampah Tanpa Paging
Untuk beberapa alasan sepertinya tidak banyak yang bekerja nanti, atau penggunaan "dunia nyata". Pada akhir makalah ini tertulis "Kami sedang mengembangkan varian bersamaan dari algoritma pengumpulan bookmark" , tapi saya tidak bisa melacaknya.
CRAMM: Dukungan Memori Virtual untuk Aplikasi yang Dikumpulkan Sampah berusaha mengubah OS untuk membuat GC membuat paging lebih sedikit.
Menggunakan Halaman Residensi untuk Menyeimbangkan Pengorbanan dalam Melacak Pengumpulan Sampah
sumber