Soyutlamadaki başarısızlık aslında çöp toplama işleminin deterministik olmadığı gerçeği değil, nesnelerin referans aldıkları şeylerle "ilgilendikleri" ve sahip olmadıkları şeylerle ilgilenmedikleri fikridir. Referanslar. Nedenini görmek için, belirli bir kontrolün ne sıklıkta boyanacağını gösteren bir nesnenin senaryosunu düşünün. Yaratılışta, kontrolün "boya" olayına abone olur ve elden çıkarıldığında abonelikten çıkar. Click olayı yalnızca bir alanı artırır ve bir yöntem getTotalClicks()
o alanın değerini döndürür.
Sayaç nesnesi oluşturulduğunda, kendisine yapılan bir referansın izlediği kontrol içinde saklanmasına neden olmalıdır. Kontrol, sayaç nesnesini gerçekten umursamıyor ve sayaç nesnesinin ve ona yapılan başvurunun varlığını bırakması kadar mutlu olurdu, ancak referans var olduğu sürece, her seferinde bu nesnenin olay işleyicisini çağırır. kendini boyar. Bu eylem kontrol için tamamen işe yaramaz, ancak getTotalClicks()
nesneyi çağıran herkes için yararlı olacaktır .
Örneğin bir yöntem yeni bir "boya sayacı" nesnesi oluşturmak, kontrol üzerinde biraz eylem yapmak, kontrolün kaç kez yeniden boyandığını gözlemlemek ve daha sonra boya sayacı nesnesini terk etmek olsaydı, nesne olaya bile abone olmaya devam ederdi yine de hiç kimse nesnenin ve ona yapılan tüm referansların yok olup olmadığını umursamazdı. Ancak nesneler, denetimin kendisi oluncaya kadar toplama için uygun olmaz. Yöntem, denetimin ömrü boyunca binlerce kez çağrılacak bir yöntem olsaydı [makul bir senaryo], bellek taşmasına neden olabilir, ancak N çağrılarının maliyetinin muhtemelen O (N ^ 2) veya O (N ^ 3), abonelik işleme çok verimli olmadıkça ve çoğu işlem aslında herhangi bir resim içermiyorsa.
Bu özel senaryo, kontrolün güçlü bir nesneden ziyade karşı nesneye zayıf bir referans göstermesini sağlayarak ele alınabilir. Zayıf bir abonelik modeli yardımcı olur, ancak genel durumda çalışmaz. Diyelim ki tek bir denetimden tek bir olayı izleyen bir nesneye sahip olmak yerine, birden fazla denetimi izleyen bir olay günlüğü nesnesine sahip olmak istedim ve sistemin olay işleme mekanizması, her denetimin bir referansa ihtiyaç duyduğu farklı bir olay günlüğü nesnesine. Bu durumda, bir denetimi olay günlüğüne bağlayan nesne yalnızca her ikisinin dedenetlenir ve olay günlüğü yararlı kalır. Ne kontrol ne de olay kaydedici link olayı için güçlü bir referansa sahip değilse, hala "yararlı" olmasına rağmen varlığını sona erdirecektir. Her ikisinden de güçlü bir olay varsa, bağlantı nesnesinin ömrü, diğeri ölse bile gereksiz yere uzatılabilir.
Evrenin herhangi bir yerinde bir nesneye atıf yoksa, nesne güvenli bir şekilde işe yaramaz olarak kabul edilebilir ve varlıktan çıkarılabilir. Bununla birlikte, bir nesneye referans olması, nesnenin "yararlı" olduğu anlamına gelmez. Birçok durumda, nesnelerin gerçek kullanışlılığı , GC perspektifinden - kendileriyle tamamen ilgisiz olan diğer nesnelere yapılan göndermelerin varlığına bağlı olacaktır .
Kimse ilgilenmediği zaman nesneler deterministik olarak bildirilirse, bu bilgiden faydalanacak olan herkesin bilgilendirildiğinden emin olmak için bu bilgiyi kullanabilirler. Bununla birlikte, bu bildirimin yokluğunda, yalnızca bu referanslara eklenmiş anlamsal anlamı değil, sadece var olan referanslar kümesini biliyorsa, hangi nesnelerin "yararlı" olarak kabul edildiğini belirlemenin genel bir yolu yoktur. Dolayısıyla, referansların varlığının veya yokluğunun otomatik kaynak yönetimi için yeterli olduğunu varsayan herhangi bir model, GC nesne terkini anında tespit edebilse bile mahkum olacaktır.