Bu belleğin, diğer tüm kaynaklardan bir araya geldiğinden daha yaygın (düzinelerce, yüzlerce hatta binlerce kez) olduğunu ileri sürerek başlayalım. Her değişken, nesne, nesne üyesi kendisine tahsis edilmiş ve daha sonra serbest bırakılan bir belleğe ihtiyaç duyar. Açtığınız her dosya için, dosyadan çıkartılan verileri depolamak için düzinelerce ila milyonlarca nesne oluşturursunuz. Her TCP akışı, akışa yazılmak üzere oluşturulan sınırsız sayıda geçici bayt dizesi ile birlikte gider. Burada aynı sayfada mıyız? Harika.
RAII'nin çalışması için (güneşin altındaki her kullanım için hazır akıllı işaretçileriniz olsa bile) mülkiyeti doğru yapmanız gerekir . Bu nesneye kimlerin sahip olması gerektiğini, kimin yapmaması gerektiğini ve sahipliğin A'dan B'ye devredilmesi gerektiğini analiz etmeniz gerekir. Elbette, her şey için ortak mülkiyeti kullanabilirsiniz , ancak daha sonra akıllı işaretçiler üzerinden bir GC taklit ediyor olacaksınız. Bu noktada , GC'yi dilde oluşturmak çok daha kolay ve daha hızlı hale gelir .
Çöp toplama sizi bu kaygıdan en çok kullanılan kaynak bellekten kurtarır. Tabii, yine de diğer kaynaklar için aynı kararı vermeniz gerekir, ancak bunlar çok daha az yaygındır (yukarıya bakın) ve karmaşık (örneğin paylaşılan) sahiplik de daha az yaygındır. Zihinsel yük önemli ölçüde azalır.
Şimdi, tüm değerlerin çöp toplanması için bazı olumsuz yönleri adlandırıyorsunuz. Ancak, her iki bellek güvenli GC entegre ve tek dile de ray ile değer türleri belkide o diğer yollarla bu tavizlere migitate daha iyidir, son derece zor?
Determinizm kaybı, pratikte o kadar da kötü değildir, çünkü sadece deterministik nesnenin ömrünü etkiler . Bir sonraki paragrafta açıklandığı gibi, çoğu kaynak (bellekten ayrı, bol miktarda ve tembel olarak geri dönüştürülebilen), bu dillerde ömür boyu nesneye bağlı değildir . Birkaç başka kullanım senaryosu da var, fakat deneyimlerime nadir rastlanırlar.
İkinci nokta, manuel kaynak yönetimi, günümüzde kapsam tabanlı temizlik yapan bir ifadeyle ele alınmaktadır, ancak bu temizliği nesne ömrü boyunca birleştirmemektedir (dolayısıyla GC ve bellek güvenliği ile etkileşime girmez). Bu using
C #, with
Python'da try
-with-Java ile son sürümleridir.