Çöp toplamanın avantajı, bir makineyi sonsuz miktarda belleğe benzetmesidir. Bu soyutlamanın mekanizması veya uygulaması, programcı olarak sizin için tamamen şeffaf olması amaçlanmıştır. Hepimiz, mekanizmanın artık program tarafından kullanılmayan belleği geri kazandığını biliyoruz, ancak bu aslında garanti edilmiyor. Programı, gerçekte kullandığından daha fazla RAM'e sahip bir makinede çalıştırırsanız, çöp toplama işlemi asla gerçekleşmeyebilir. Yine ilgisiz, çünkü programı hafızayı nasıl kullandığından bağımsız olarak yazabilirsiniz. Bellek yöneticisi, program her istediğinde daha fazla RAM ayırır ve bu tür ayırmaların her zaman başarılı olacağını varsaymanıza izin verilir. Java çöp toplanmış bir dildir ve C ++ değildir. 1
Çöp toplamanın dezavantajı, tüm soyutlamalar gibi , sızıntı eğilimi göstermesidir. Her zaman, özellikle kenar durumlarda, her zaman mükemmel çalışmaz ve muhtemelen hatalarla karşılaşırsınız. Çöp toplama algoritmasını (bir programcı olarak size saydam olması gereken) yazan kişiler, en yaygın durumlar için optimize edilmiştir ve yaygın vakalardaki sorun, asla bu kadar yaygın olmamalarıdır. Genel olarak , çöp toplayıcısının hafızayı yönetmede yapabileceğinden daha iyisini yapamazsınız. Ancak belirli durumlarda (ve yeterli miktarda zaman, enerji ve anlayış verildiğinde) mümkün olabilir. C ++ size bu esnekliği sağlar; Java bunu yapmaz.
Bunların hepsi, bir dil seçmek için standart tavsiyenin burada, belki de bu durumda kısıtlamalar göz önüne alındığında geçerli olduğunu söyledi. Proje için birincil geliştiricilere en tanıdık olan dili seçin. Açık nedenlere ek olarak (uygulamayı daha hızlı ve daha verimli bir şekilde geliştirebileceğiniz gibi), bu özellikleJava'yı programladığınız gibi C ++ programlamak son derece etkili olmayan bellek yönetimi uygulamalarına ve dolayısıyla sızıntılara ve çökmelere neden olacağından açıklamanız durumunda önemlidir. Benzer şekilde, C ++ 'da programladığınız gibi Java'da programlama yapmak size çok iyi gelmeyecektir ve çöp toplama algoritmalarının en yaygın durumlar için ayarlandığı ve ayarlandığı göz önüne alındığında, optimize edilmemiş bir program üretebilir. .
Çöp toplanan dillerde çalışmaya alışkın olan programcılar, ona karşı savaşmak yerine çöp toplayıcıya güvenmeyi öğrenirler. Çöp toplanmış bir dilde çalışıyorsanız, bunlar projenizde istediğiniz programcılardır. Olan programcılar değilçöp toplanmış bir dilde çalışmak için kullanılan bu tür "sonsuz bellek" soyutlama doğası gereği şüpheci ve çoğu zaman birçok iyi nedenleri vardır. Bu programcılar iyi olabilir, bunlar çöp toplanmış bir dilde çalışmak isteyenler değildir çünkü yolun her adımında GC'ye karşı savaşacaklar, sürekli olarak ikinci tahmin edip genellikle daha yavaş, daha az bellek verimli üretecekler kodunu diğer programcı türünden daha fazla. En iyi ihtimalle, tekerleği yeniden icat etmek için çok fazla zaman harcayacaklar, size çok para ve hatta uzun vadeli bakım maliyetlerinde daha fazla para harcayacaklar.
Ve sonra kendinize bunun gerçekten önemli olup olmadığını sormanız gerekir. Bo'nun gizli yorumunun bir gerçeğinden daha fazlası var: bellek şimdi çok ucuz, çok fazla el sıkmaya değmez. Büyük miktarlara ihtiyacınız olsa bile , bu miktarlar şu anda 10 yıl kadar büyük değil. Programcılar ve uygulama geliştirme sadece RAM ve işleme gücü satın almaktan çok daha pahalıdır. Bu, mümkün olan yerlerde ekonomiden kaçınmanız gerektiği anlamına gelmez, ancak bunu yapmak için çok fazla zaman harcamamanız gerektiği anlamına gelir.
1 Tabii ki, bu varsayım sorudaki daha derin bir kusuru vurgular. Görünüşe göre, "Java veya C ++" biraz kırmızı bir ringa balığı. Standart Java uygulaması çöp toplama sağlar ve C ++ dil standardına göre değildir, ancak C ++ için üçüncü taraf bir çöp toplayıcı kullanamamanız için hiçbir neden yoktur. Birçok şirket bu şeyleri satarak geçimini sağladı ve bazıları muhtemelen onlara ücretsiz olarak para kazandı.