Garbage Collection
2 min readDec 29, 2019
Garbage Collection hakkında bilmemiz gerekenler şunlardır;
- Garbage Collection mekanizması memory(kaynak) yönetiminin adıdır.
- C gibi dillerde calloc gibi fonksiyonlarla memory ayırırız, free fonksiyonu ile memory boşaltırız.
- Java’da ise bu şekilde kendimiz memory ayırmayız. Otomatik olarak Java bu işi kendisi halletmektedir.
- Garbage Collection avantajı, memory yönetimi yaparak leak(sızıntı)’ya engel olur.
- Bu işlemde Java’nın robust(dayanıklı,güçlü) özelliğine katkı sağlar.
- C’de olduğu gibi pontier,calloc,free gibi fonksiyonlarla uğraşmadığımız için, Java’nın simple özelliğini sağlar.
- JVM(Java Virtual Machine) OS(işletim sistemi), memory(bellek) ram alır ve bunu yönetir.
- Java’da objeler ve instance değişkenler memory heap alanında yaşarlar.
- Proje ayakta olduğu sürece kullanılmayan kobjeler belleği kullansa belli bir süre sonra bellek şişecektir, dolacaktır. Garbage Collection kullanılmayan objeleri heap alanından temizleyerek, bu tür olumsuz davranışları en aza indirmektedir.
- Garbage Collection System.gc() ile kendimizde çağırabiliriz.
- Garbage Collection mekanizması çalışma mantığı, unreachable(ulaşılamayan,sahipsiz) objeleri heapten temizler ve yeni objeler için yer ayrılır.
- Garbage Collection mekanizması JVM sorumluluğu altındadır.
Örnek olarak;
- Burada Animal sınıfının objesini oluşturduk.
- animal objesi heap alanında tutulmaktadır.
- animal = null; işlemi ile objenin referansını(bağlantısını) kapatıık, null atadık.
- Bu işlemden sonra JVM garbage collection çalıştırarak animal objesini heap alanından temizleyecektir.
Başka bir örnek;
Buradaki örnekte,
- Date methodunun objesini oluşturduk.
- getDate() methodunda StringBuffer kullandık.
- return ile date objesini döndük.
- 10. satırdan sonra sb objesi çöp durumuna geçer ve bellekten silinecektir.
- Fakat date objesini hala dateLocal objesi gösterdiği için bellekteki date alanı çöp değildir.
Başka bir örnekte;
- Runtime objesi üretiliyor.
- ilk önce Total memory yazdırılıyor.
- Daha sonra kullanabileceğimiz free memory’i yazdırıyoruz.
- for döngüsü ile birden fazla Date objesi oluşturuyoruz.
- objeleri oluşturduktan sonra after free memory yazdırıyoruz.
- System.gc() ile garbage collection çağrıyoruz ve kullanılmayan objeleri temizletiyoruz.
- Garbage collection çağrıldıktan sonra free memory yazdırıyoruz.
Github : GarbageCollection