Ben çöp toplama olmalı diye düşündüğüm bir nesne çöp toplanan Ruby'de çöp toplama ile ilgili bir sorun yaşıyorum.Dairesel Nesne ile Ruby Garbarge Koleksiyonu Referanslar
Nesneleri yapan bazı nesneleri yapın ve ilgili nesne kimliğini bulun. Sonra GC.start
:
> find_dependencies(144789180)
=> {144789180=>[61895480, 144786340, 147807540],
61895480=>[144789180],
144786340=>[144789180],
147807540=>[144789180]}
orada dairesel referans deseni burada, ama hepsi tamamen bu dört nesneler içerdiği, böylece Mark-ve-Sweep toplayıcı Onları bulup çıkarmak gerekir gibi görünüyor.
Bu yüzden, ya find_dependencies_function, Mass gem ya da Ruby'nin çöp toplayıcısında bir hata var. Sorunun ne olduğunu bulmak ve bu bellek sızıntısını çözmek için bunu nasıl daraltabilirim?
Mark-ve-süpürme şeyler bu tür işleyemez. Bunu yapmak için, toplayıcının tüm ağacı kaldırmasına izin vermek için bu nesnelerdeki WeakRef'i kullanmanız gerekir. – Linuxios
Neden bu şeyleri işaretleyip süpürüp atlayamıyorsunuz? Referans sayımı ile nasıl kaybolacağını görebiliyorum, ama bunlar işaretlenmemeli ve toplanmalı mı? – aaronjg
İlk önce sormam gereken - nesne referansını nasıl kaybedersiniz? Alt nesnelere kesinlikle * hayır * başka referans var mı? – Linuxios