06.03.2015 Views

Java Kitabı

JAva`nın çalışma mantığıyla başlayıp basitten gelişmişe iyi bir kaynak

JAva`nın çalışma mantığıyla başlayıp basitten gelişmişe iyi bir kaynak

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

açıyoruz<br />

benzin_deposu_dolu = depoyu_doldur ;<br />

this.ucak_isim =ucak_isim ;<br />

}<br />

// depo dolu<br />

/* Kapakların kapatılmasını finalize() yordamına bıraktık */<br />

public void finalize() {<br />

if (benzin_deposu_kapagi_acik_mi) { //<br />

kapak açıksa<br />

benzin_deposu_kapagi_acik_mi = false ; //<br />

kapağı kapa<br />

System.out.println(ucak_isim + "- kapaklari<br />

kapatildi ");<br />

}<br />

}<br />

}<br />

public class BenzinDepo {<br />

public static void main(String args[]) {<br />

Ucak ucak_1 = new Ucak(true,"F-16"); //<br />

benzin doldur<br />

new Ucak(true,"F-14");<br />

// benzin<br />

doldur<br />

System.gc();<br />

// kapakları kapat<br />

System.out.println("Ucaklara benzin dolduruldu,<br />

kapaklari”<br />

+<br />

“kapatildi");<br />

}<br />

}<br />

Bu örnekte 2 adet Ucak nesnesi oluĢturuluyor. Nesneler oluĢturulur oluĢturmaz kapaklar açılıp depolarına<br />

benzin doldurulmaktadır. Kapakları kapatma iĢlemi için finalize() yordamını kullanılıyor. Sonuçta<br />

System.gc() çağrılınca çöp toplayıcısının tetiklendiği bilinmektedir. Uygulamanın sonucu aĢağıdaki<br />

gibi olur: ()<br />

F-14 - kapaklari kapatildi<br />

Ucaklara benzin dolduruldu,kapaklari kapatildi<br />

Uygulama çıktısının gösterdiği gibi, sadece F-14 isimli Ucak nesnesine ait benzin deposunun kapağı<br />

kapatılmıĢ durumda, F-16 isimli Ucak nesnesinin kapağı ise hala açık durmaktadır –ki istenen durum F-16<br />

isimli Ucak nesnesininde kapağının kapalı olmasıdır. Bu yanlıĢlığın sebebi, F-16 isimli Ucak nesnesine,<br />

yine Ucak tipinde olan ucak_1 referansının bağlanmıĢ olmasıdır. Çöp toplayıcısı boĢta olan nesneleri<br />

bellekten siler, yani herhangi bir nesne, bir referansa bağlanmamıĢ ise o nesne boĢta demektir. Bu<br />

örneğimizde boĢta olan nesne ise F-14 isimli Ucak nesnesidir ve çöp toplayıcısı tarafından temizlenmiĢtir<br />

ve bu temizlik iĢleminden hemen önce F-14 isimli Ucak nesnesinin finalize() yordamı çağrılmıĢtır. ()<br />

Özet olarak, System.gc() ile çöp toplayıcısını tetikliyebiliriz ama referanslar, ilgili nesnelere bağlı<br />

kaldığı sürece, bu nesnelerin bellekten silinmesi söz konusu değildir. Dolayısıyla finalize() yordamı<br />

kullanılırken dikkatli olunmalıdır. ()<br />

3.2.4. Çöp Toplayıcısı (Garbage Collector) Nasıl Çalışır?<br />

66

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!