Python bellek yönetiminin iç yapısını CPython üzerinden inceledi
Öne çıkanlar
- CPython, 512 bayt altındaki küçük nesneler için pymalloc, üzerindekiler için standart malloc mekanizmasını kullanıyor.
- Bir arena içindeki tüm havuzlar boşalmadıkça Python bu belleği işletim sistemine iade etmiyor.
- Döngüsel referanslar referans sayımıyla temizlenemediği için nesil tabanlı çöp toplayıcı devreye giriyor.
Python programlama dilinde bellek tahsisi ve serbest bırakma süreçleri, nesnelerin boyutuna ve referans durumuna göre farklı mekanizmalarla yönetiliyor. CPython 3.12 temel alınarak paylaşılan teknik analizde, 512 bayt ve altındaki küçük nesneler için pymalloc tahsisçisinin, daha büyük nesneler için ise doğrudan C kütüphanesindeki malloc sisteminin kullanıldığı aktarıldı. Bu yaklaşım, sistem çağrısı yükünü azaltmayı amaçlıyor.
Küçük nesneler için bellek, işletim sisteminden "arena" adı verilen büyük bloklar halinde talep ediliyor. Her arena 64 adet havuza, her havuz da eşit boyutlu bloklara bölünüyor. Bir arena içindeki tüm havuzlar boşalmadığı sürece işletim sistemine iade edilmiyor; tek bir canlı nesne bile tüm arenanın işletim sisteminde tutulmasına yol açıyor. Bu durum, Python süreçlerinin neden nadiren küçüldüğünü ve işletim sistemine serbest bırakılan belleği hemen geri yansıtmadığını gösteriyor.
Belleğin serbest bırakılması tarafında ise referans sayımı ve çöp toplayıcı birlikte görev yapıyor. Her nesne, kendisine işaret eden referans sayısı sıfıra indiğinde anında siliniyor ve ait olduğu bloğu boşa çıkarıyor. Birbirine işaret eden döngüsel referanslarda ise devreye nesil tabanlı çöp toplayıcı giriyor; erişilemeyen nesneler gen0, gen1 ve gen2 nesilleri taranarak periyodik biçimde bellekten kaldırılıyor.
Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.