Dokumentasi pengumpul sampah Python [ditutup]

132

Saya mencari dokumen yang menjelaskan secara detail cara kerja pengumpulan sampah python.

Saya tertarik dengan apa yang dilakukan pada langkah mana. Benda apa yang ada dalam 3 koleksi ini? Jenis objek apa yang dihapus pada setiap langkah? Algoritma apa yang digunakan untuk menemukan siklus referensi?

Latar Belakang: Saya menerapkan beberapa pencarian yang harus diselesaikan dalam waktu sedikit. Ketika pemulung mulai mengumpulkan generasi tertua, itu "jauh" lebih lambat daripada dalam kasus lain. Butuh lebih banyak waktu daripada yang dimaksudkan untuk pencarian. Saya mencari cara memprediksi kapan akan mengumpulkan generasi tertua dan berapa lama.

Sangat mudah untuk memprediksi kapan akan mengumpulkan generasi tertua dengan get_count()dan get_threshold(). Itu juga bisa dimanipulasi set_threshold(). Tapi saya tidak melihat betapa mudahnya memutuskan apakah lebih baik dibuat collect()secara paksa atau menunggu koleksi yang dijadwalkan.

Sokongan
sumber

Jawaban:

126

Tidak ada sumber daya yang pasti tentang bagaimana Python melakukan pengumpulan sampahnya (selain dari kode sumber itu sendiri), tetapi ketiga tautan itu akan memberi Anda ide yang cukup bagus.

Memperbarui

Sumbernya sebenarnya cukup membantu. Seberapa banyak Anda keluar dari itu tergantung pada seberapa baik Anda membaca C, tetapi komentar sebenarnya sangat membantu. Lewati collect()fungsi dan komentar menjelaskan proses dengan baik (meskipun dalam istilah yang sangat teknis).

Rafe Kettler
sumber
3
CPython tidak lagi menggunakan Subversion. Mereka beralih ke Mercurial yang dihosting di hg.python.org. Karena saya tidak tahu cara menautkan ke versi file saat ini di situs itu, saya akan menautkan ke mirror GitHub tidak resmi sebagai gantinya.
Marius Gedminas
1
Sudahlah, menemukan cara menautkan ke gcmodule.c terbaru di situs resmi. Saya masih menemukan GitHub lebih mudah dibaca.
Marius Gedminas
belajar banyak. Thx
gus
1
Tautan pertama tidak menunjukkan apa pun yang terkait dengan pengumpulan sampah Python. Harap perbarui tautan.
Manish Barnwal