Java – Garbage Collector – GC

C++ da hafıza yönetimi programcı sorumluluğundadır. Java’da ise JVM tarafında HOTSPOT teknolojisi vardır. Nesneleri eski ve yeni grup diye ayırır. Garbage Collector bu eski grupta yer alanları hafızada her dolmaya yakınken temizler. Ayrıca referansı olmayan nesneleri de siler hafızadan. Hafıza yönetimini programcı yapmasa bile Garbage Collector yapabilir.

Kullanımına kısa bir örnek;

public static  void  main(String[] args){

    evHacim ev1 = new evHacim();
    new evHacim();   //  referansı olmayan nesne üretildi.
    System.gc();  //  garbage collector çağrıldı.

    ev1.en = 5;
    ev1.boy = 8;
    ev1.yukseklik = 12;
    // int sonuc = hacim(ev1.en, ev1.boy, ev1.yukseklik);
    System.out.println("Evin Hacmi = "+ hacim(ev1.en, ev1.boy, ev1.yukseklik) );

}

GC çalıştığı zaman arka planda bazen kendi kodlarımızın çalışmasını isteyebiliriz. Bu durum için finelize()metodu kullanırız. Çalışmasını istediğimiz kodları finelize metoduna yazarız, GC devreye girdiğinde bu metodda çalışmış olur. Bizim çalıştırmamıza ihtiyaç duymaz.  En basitinden bu metodun için GC çalıştı diye bir mesaj yazdırarak ne zaman çalıştığını görebiliriz.

public class evHacim {

    int en;
    int boy;
    int yukseklik;

    public static int hacim(int x, int y, int z){
        return x*y*z;
    }

    public void finalize(){
        System.out.println("Garbage Collector çalıştı .. finelize metodu içindeyim... ");
    }

        public static  void  main(String[] args){

            evHacim ev1 = new evHacim();
            new evHacim();   //  referansı olmayan nesne üretildi.
            System.gc();  //  garbage collector çağrıldı. Yukarıdaki metod içindeki metin yazdırıldı

            ev1.en = 5;
            ev1.boy = 8;
            ev1.yukseklik = 12;
            System.out.println("Evin Hacmi = "+ hacim(ev1.en, ev1.boy, ev1.yukseklik) );
        }
}

Çıktısı: 
Garbage Collector çalıştı .. finelize metodu içindeyim... 
Evin Hacmi = 480

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir