‫Geri geleceğiz.
‫Bu videoda çöp toplayıcıdan ve C-sharp'ın bellekle nasıl ilgilendiğinden bahsetmek istiyorum.
‫Dolayısıyla çöp toplama, birden fazla programlama dilinde kullanılabilen bir araçtır.
‫Ve bazılarında manuel olarak, bazılarında ise otomatik olarak yapılır.
‫Ve dot net framework otomatik bir bellek yönetimi sağlar, bu da tüm programlama dillerinde olduğu
‫gibi çöp toplayıcıyı manuel olarak kullanmanız gerekmediği anlamına gelir.
‫Dolayısıyla, C veya C++ ve diğerleri gibi programlama dilleri, arada sırada çalıştırmanız gereken manuel bir çöp toplama işlemine sahiptir
‫ve bunu ne zaman çalıştırmanız gerektiğini bilmeniz gerekir.
‫Yani bu, C mağazasında otomatik olarak yapılan bir şeydir.
‫Bu yüzden evet, pek çok insanın çok sık kullandığı bir şey değil.
‫Dolayısıyla, daha karmaşık programlara sahip olduğunuzda ve gerçekten gelişmiş olduğunuzda, ara sıra kullanmaya başlayacaksınız.
‫Ama gerçekten de her zaman kullanmanız gereken bir şey değil, hatta çoğu durumda hiç kullanmanız gerekmiyor.
‫İşte bu yüzden, tabiri caizse, önemli bir konu değil.
‫Tamam.
‫Diyelim ki Dennis adında bir nesnemiz var ve insan türünde.
‫Bu yüzden insan adında bir sınıf oluşturdum ve birden fazla farklı özelliği var.
‫Sonuçta, insan türünde bir nesne oluşturuyorum ve buna Dennis adını veriyorum.
‫Ve bunu yaparak, bu yeni anahtar sözcüğü kullanarak belleğe ihtiyaç duyuyorum çünkü belleğimde bir nesne yaratıyor.
‫Böylece C Sharp bizim için bellek ayırır ve çerçeve, nesneler artık kullanılmadığında sistemde kullanılmak
‫üzere belleği geri almakla ilgilenir.
‫Yani bu durumda, bu nesneyi oluşturuyorum ve sonra onu kullanabilirim ve tekrar tekrar kullanabilirim.
‫Ama bir noktadan sonra artık kullanmayacağım ve hatta belki de referansları keseceğim.
‫Ve sonra, evet, çöp toplayıcı bunu temizleyecektir çünkü bu bellek artık engellenmiştir ve çöp toplayıcının
‫temizlemesi gerekir.
‫Dolayısıyla bu belleği örneğin diğer nesneler için tekrar kullanılabilir hale getirmesi gerekir.
‫Şimdi de görsel bir perspektiften bakalım.
‫Yani sol tarafta bu sistem bellek havuzu ve sağ tarafta da programımız var.
‫Ve sistem bellek havuzunda bir sürü bellek vardır, bu yüzden bu belleği birden fazla farklı program için kullanabiliriz.
‫Ama şimdi onu çalıştıran programımız var ve şimdi programımızda bir nesne yaratıyoruz.
‫Şimdi, aniden hafızamızda biraz boşluğa ihtiyacımız oldu.
‫Tamam.
‫Yani programımızdan nesnemizin depolandığı belleğe bir referans var.
‫Tamam.
‫Yani doğrudan bir referans var ve bunu yeniden kullanabilir ve farklı noktalardan çağırabiliriz vb.
‫Tamam.
‫Ve sonra bir tane daha ve bir tane daha var.
‫Yani oluşturduğumuz birden fazla farklı nesnemiz var.
‫Ve her yeni nesne yarattığımızda, bellek havuzunda bir bellek ayrılır ve programımızdan
‫bu belleğe bir referans vardır.
‫Yani bu referanslar orada.
‫Yani programımızdan bellek havuzuna bir referans var.
‫Şimdi bir noktada referans silinmiş olabilir.
‫Yani bir değişkeni null yaparak ya da nesneyi null yaparak referansı silebiliriz ve sonra referans
‫aniden yok olur.
‫Artık programımızdan buradaki küçük bellek tahsisine bir referans yok.
‫Çöp toplayıcımız bunu fark eder ve der ki, tamam, referans yok, yani bu küçük bellek parçası
‫hiç kullanılmadı, bu yüzden onu temizleyelim veya yeniden tahsis edelim ya da başka tahsisler için serbest
‫bırakalım.
‫İşte o zaman böyle olur.
‫Şimdi çöp toplayıcının ne zaman devreye gireceğine dair bir örneğe bakalım.
‫Burada fonksiyonum adında bir fonksiyonum var ve burada bir nesne oluşturuyorum.
‫Tekrar söylüyorum, buna Dennis denir.
‫Ve sonra Dennis onun yöntemlerini çağırıyor ya da biz onun yöntemlerini öğretmek olarak adlandırıyoruz.
‫Sonra yaşını ayarlıyoruz ve sonra başka bir yöntem çağırıyoruz, yaşlanıyoruz ve bu böyle devam ediyor.
‫Ancak bir noktada, işlev çağrısı sona erdiği için bellekteki bu Dennis nesnesine artık ihtiyaç duyulmaz.
‫Böylece işlev nesneyi sonlandırır.
‫Dennis kapsam dışına çıkar ve artık Dennis'e referans yoktur çünkü benim fonksiyonum bir fonksiyondur ve bir fonksiyonun
‫içinde yer alan bu nesneye sahibizdir, dolayısıyla kapsamı fonksiyonun içindedir.
‫Dolayısıyla, fonksiyon çağrısı sona erdiğinde, artık ona doğrudan bir referans yoktur çünkü bir fonksiyonun içinde
‫bulunan bir nesneye bu fonksiyonun dışından referans veremeyiz.
‫Doğru.
‫Bu nedenle bunun için alanlar oluşturmamız veya başka yaklaşımlar uygulamamız gerekecektir.
‫Ancak sonunda, çöp toplayıcı bu Dennis'i temizler ve bu belleği yeniden tahsis eder.
‫Buradaki genel fikir, bunun sadece basit bir örnek olduğudur.
‫Çöp toplayıcının devreye gireceği pek çok başka durum vardır, ancak bu zaten kullandığımız
‫bir şeydir.
‫Yani burada görebileceğiniz kavramları, bu kursun diğer videolarında veya derslerinde zaten görmüştük.
‫Bu yüzden bu örneği seçtim.
‫Peki çöp toplama hakkında bilmeniz gerekenler nelerdir?
‫Çöp toplayıcıyı manuel olarak çağırmak zorunda değilsiniz, ancak bunu manuel olarak yapabilirsiniz.
‫Çöp toplayıcı işlem gücü gerektirir, bu nedenle ayrı bir iş parçacığı üzerindedir ve çok hafiftir.
‫Ancak yine de biraz işlem gücü gereklidir.
‫Çöp toplayıcıların amacı belleği boşaltmak ancak çok fazla işlem gücü kullanmamaktır.
‫Dolayısıyla genel olarak çok fazla işlem gücüne ihtiyaç duymayacaktır, ancak her zaman çağrılmayacaktır
‫veya çöp toplayıcı belleği boşaltmak için her zaman çalışmayacaktır.
‫Sadece gerekli olduğunda ya da gerekli gördüğünde, gerekli olduğunu düşündüğünde çalışacaktır.
‫İşte işin zor kısmı da burası.
‫Hafızanın hemen geri kazanılması gerekmez.
‫Çöp toplayıcıyı elle çağırsanız bile biraz zaman alabilir, hemen çalışması
‫gerekmez.
‫Yani bunlar çöp toplayıcı ile ilgili bazı zor şeyler.
‫Bir nesne çöp toplayıcı tarafından bellekten serbest bırakılmadan hemen önce kod çalıştırmak için sonlandırılmış bir yöntem
‫uygulayabilirsiniz.
‫Bu, bir nesne temizlenmeden hemen önce belirli bir kodu çalıştırmaya karar verirseniz, çöp toplayıcı onu temizlemeden hemen
‫önce anlamına gelir.
‫Bu nedenle, örneğin artık referans kalmadığında, çalıştırmalarını istediğiniz belirli işlevleri
‫uygulamak için bu sınıf içindeki final lazer yöntemini kullanabilirsiniz.
‫Belki de çöp toplayıcı gelip nesnenizi temizlemeden ya da belleği yeniden konumlandırmadan ya
‫da bellekten bu nesneye bırakmadan hemen önce bir şeyleri kendiniz temizlemek istersiniz.
‫Tamam.
‫Çöp toplayıcı ne zaman çalışır?
‫Sistemin fiziksel belleği düşük olduğunda, ayrılan bellek önceden belirlenmiş bir eşiği
‫aştığında, çöp toplayıcı toplama veya toplama yöntemi çağrıldığında, bu süper zor bir yöntem olsa da.
‫Yani bu öyle bir şey ki.
‫Evet, çok özel, çok özel.
‫Bu konuda daha fazla bilgi edinmek istiyorsanız, çöp toplayıcı hakkındaki belgelere göz atmalısınız.
‫Ancak nokta toplama yöntemi her zaman doğrudan çağrılmaz ve her şeyi doğrudan temizlemez.
‫Daha çok araca bir öneri veriyormuşsunuz gibi, yani tamam, çöp toplayıcı diyorsunuz.
‫Ben şahsen bunun çöpleri toplamak için iyi bir nokta ya da iyi bir nokta olacağını düşünüyorum, ancak bazı durumlarda bunu kabul
‫etmeyebilir ya da daha sonra yapabilir ya da bunun gibi bir şey olabilir.
‫Belki de sadece çöp toplama işlemi yaptı ve bunun gerekli olmadığına karar verdi ya da bunun gibi bir şey.
‫Yani bu çok zor bir konu.
‫Bu konuda daha fazla bilgi edinmek istiyorsanız, belgelere göz atın.
‫Ancak bunun çöp toplayıcının ne yaptığını anlamak için iyi bir başlangıç noktası olduğunu düşünüyorum.
‫Ve dediğim gibi, çoğu durumda buna ihtiyacınız olmayacak çünkü günümüzde çok fazla belleğimiz var.
‫Ve programlarınızda büyük bellek sızıntıları yoksa, bu sorunlarla asla karşılaşmazsınız.