A refcounting legnagyobb problemaja, hogy GC szempontbol nem teljesen korrekt algoritmus.
Ugyanis nem csak akkor szabad felszabaditani egy objektumot, amikor mar 0-ra csokkent a referenciaszamlaloja, hanem akkor is, ha mar nem erheto el az un. root objectekbol (regiszterek, statikusok, aktiv lokalis valtozok). A legegyszerubb pelda erre, ha van egy A es egy B objektumod, amelyek kolcsonosen hivatkoznak egymasra, de senki mas nem hivatkozik rajuk es mar kikerultek a scope-bol. Ilyenkor mindkettojuk referenciaszamlaloja 1-et mutat, tehat a naiv megkozelites szerint nem lehetne oket eldobni. Viszont mar nem elemei az un. "reachable set"-nek, magyaran szolva semmilyen aktiv valtozon keresztul sem tudod oket elerni, tehat mehetnek a levesbe. Ezt kell valamilyen modon detektalni.
Mondjuk kepzelj el egy fa adatszerkezetet, amelyiknel minden node hivatkozik a gyerekeire es a szulore is (nem mondom, hogy ez feltetlenul egy jo fa megvalositas, de a gyakorlatban ilyen szituaciok azert elo szoktak fordulni). Egy ilyen adatszerkezet orokre a memoriaban maradna, ha nem torod meg a koroket. Es a korok megtalalasa valoban lassabb, mint az az algoritmus, amit a JVM es a CLR hasznal GC-re (ok nyilvantartjak a root object-eket es egyszeruen felepitik az elerheto objektumok halmazat, az az aktiv objektum, ami nem erheto el, az mehet a kukaba).
Visszaterve az eredeti ketobjektumos peldara. A Python interpreter szemetgyujtoje valamikor ra fog ebredni, hogy A es B mar nem elerheto ezert megsemmisithetoek, es itt jon a problema: nemdeterminisztikus, hogy milyen sorrendben teszi ezt. Es ha mondjuk B objektum a destruktoraban vissza szeretne szolni A-nak, hogy o most eppen pusztulni keszul, nem lehet benne biztos, hogy A ott van vagy nincs. Ezert szokott egy good practice lenni a GC nyelvekben, hogy a finalizer-ek implementaciojaban nem nyulnak a referenciakhoz, vagy ha hozza kell nyulni, akkor mindig meg kell rola gyozodni, hogy milyen allapotban van a hivatkozott objektum. Itt a ketobjektumos peldanal ez nem feltetlenul nagy pluszmunka, de szerintem nem egy jol skalazodo megoldas. Ahogy egyre bonyolultabba valnak az objektumgrafok, annal komplikaltabba valik a problema es annal tobb explicit beavatkozast igenyel.