GC'ın devreye girmesini beklemek zorunda değiliz aslında onu zaten C++ bakımı için örnek vermiştim. Spring kullanıyorum ve nesnelerin yaşam döngüsü Spring tarafından yönetiliyor. Spring'in Dependency Injection mekanizması sayesinde, gerekli olan nesneler otomatik olarak oluşturuluyor ve kullanıldıktan sonra GC tarafından temizleniyor. Bu nedenle, manuel olarak bellek yönetimi yapmama gerek kalmıyor.GC null olmasını beklemek zorunda değil. Dataya referans kaybolduysa devreye girer. Kullanan yoksa temizler datayı.
GC'nin yanlış takip etmez genelde. Ancak takibin kendisi başlı başına performansa etkisi olan bir şey. Garbage collected dillerin en hızlısı Java bile C++'tan yavaş çalışacak, hemde minimum %30-40 gibi bir performans kaybından bahsediyoruz.
Java memory management için muazzam şeyler yapıyor. Tartışmasız. Ancak bu memory management'ın otomasyonu, daha önce de bahsettiğim gibi performansta düşmelere sebep oluyor.
Ek olarak GC her zaman ihtiyaç duyduğumuz bir şey değil. Daha güvenli bir yaklaşım mı? Evet. Rapid development dediğimiz, aşırı hızlı geliştirme yapılan uygulamalarda, GC'ye sahip olmak daha az bellekle alakalı bug ile program yazmana olanak sağlıyor. Fakat şart değil. C++'ta eğer belirli ilkelere uyarsan, zaten GC'nin yaptığı her şey otomatik olarak gerçekleşiyor çünkü dilin dizaynı böyle.
Örneğin sadece datasını kullanacağın bir değişkeni const ref olarak alırsan, kopyalamadan kaçınmış olursun. Eğer kendi üstünde değişiklik yapman gerekiyorsa ama nesnenin orijinalini bozmak istemiyorsan kopyalarsın. Referans aldığın nesneler sana ödünç verilmiştir, işin bittiğinde sahiplerine senin üzerlerinde yaptığın değişiklikler ile birlikte geri dönerler.
Kısaca anlatmaya çalıştığım şey GC'nin şart olmadığı ve olmamasının ciddi bir problem teşkil etmediği. Hatta belirli durumlarda olmamasının daha hayırlı olduğu. Tamamen projenin ve ürünün gereksinimlerine göre karar verdiğimiz bir şey.
Tam olarak bakım dediğim kısım buydu. C++ biraz uğraştırabiliyor. Ben direkt kontrolü devrediyorum.
Tabii hocam C++ dilinde belki Spring gibi bir Framework olabilir.
Hocam zaten Java dünyanın en iyi programlama diliJava memory management için muazzam şeyler yapıyor. Tartışmasız.
Son düzenleme: