Bilgisayar bilimlerindeki tüm sorunlar, çok fazla dolaylı katman sorunu hariç, başka bir dolaylı düzey ile çözülebilir.
Yaklaşımınız çöp toplama sorununu hemen çözmez, ancak sadece bir seviye yukarı taşır. Ve ne pahasına! Şimdi, her bellek erişimi başka bir işaretçi referansından geçer. Sonuç konumunu önbelleğe alamayız, çünkü bu arada başka bir yere taşınmış olabilir, her zaman nesne kimliğinden geçmeliyiz. Çoğu sistemde, bu dolaylı yayın kabul edilemez ve dünyayı durdurmanın toplam çalışma zamanı maliyetinin daha düşük olduğu varsayılır.
Teklifinizin sorunu çözdüğünü değil, yalnızca hareket ettiğini söyledim. Sorun, nesne kimliklerinin yeniden kullanılmasıyla ilgilidir. Nesne kimlikleri artık bizim işaretçilerimize eşdeğerdir ve yalnızca sınırlı miktarda adres vardır. Programınızın ömrü boyunca, örneğin bir döngü gibi INT_MAX nesnelerinden daha fazlasının oluşturulduğu düşünülebilir (özellikle 32 bit sistemde).
while (true) {
Object garbage = new Object();
}
Her nesne için nesne kimliğini artırdığımızda, bir noktada kimlikler tükenir. Bu nedenle, hangi kimliklerin hala kullanımda olduğunu ve hangilerinin geri alınabilmesi için ücretsiz olduğunu bulmalıyız. Kulağa tanıdık geliyor mu? Şimdi ilk kareye geri döndük.