19 Nisan 2012 Perşembe

JAVADA GARBAGE COLLECTIONS

Yaddas idaresi ( Memory management ) applicationlarin 1 coxunda kritik meselelerdendir.Javanin Garbage Collectoru yaddas idaresinin avtomatik helli yolunu temin edir.Yaddasin 1 hissesi olan Heap Java obyektlerinin yasadigi 1 yerdir hansiki garbage collector proseslerinde eas hisseni teskil edir.garbage collector run olanda onun esas meqsedi obyektleri tapmaq ve silmekdir hansiki hemin obyektlere artiq catmaq mumkun deyil.GC JVM-in controlu altindadir.JVM qerara alir GC-nin run olunma zamanini.GC yaddas azalmaga dogru icra olundugu zaman run olunur.Her 1 java programinin 1den cox thread-leri var.Her 1 thread-in ozunun sexsi balaca icra olunma stack-i var.Normalda en azi 1 thread Java programinda run olmaga sebeb olur 1i stack-in dibinde yerlesen main() metodudur.Her 1 thread-in ozunemexsus heyat dovriyesi var.Thread-ler sag veya olu ola biler.Obyektler yasamayan thread onu access edende GC ucun qebul oluna bilendir.Yeni  eligible-dir.GC yalniz String olmayan obyektler ucun tetbiq olunur.Teriflere esaslanaraq GC bezi bilinmeyen emeliyyatlar edir ve yasayan thread terefinden reached oluna bilmeyen obyekti tapanda o bu obyekti eligible kimi hesab edir silinmek ucun.ve hetta onu silede biler.Eger bizim programimizda obyekte istinad eden referance deyisenimiz varsa ve o referance deyiseni yasayan thread terefinden available-dirsa onda o obyekt reachable hesab olunur.GC yaddasdan obyektleri silmeye cehd edir onlardan istifade olunmayanda.Eger coxlu yasayan obyektler olsa programimizda sistemimiz yaddasi tukendirer.

  public static void main(String[] args) {
StringBuffer sb=new StringBuffer("Hale");
System.out.print(sb);     // StringBuffer obyekti eligible deyil.
sb=null;                         // StringBuffer obyekti eligible-dir.

Runtime class-i yegane objesi (Singleton) olan xususi 1 class-dir her 1 main program ucun.Runtime obyekti JVM ile bilavasite elaqeni temin edir.Runtime obyektini almaq ucun Runtime.getRuntime() metodunu istifade etmek lazimdir,hansiki Singleton qaytarir.GC-ni cagirmaq ucun gc() metodu istifade edilir.Bu metodu System class-i uzerindende cagirmaq olar,hansiki static olan 1 metoddur.
System.gc();

public class CheckGC {
public static void main(String[] args) {
Runtime rt = Runtime.getRuntime();
System.out.println(“Total JVM memory: ” + rt.totalMemory());
System.out.println(“Before Memory = ” + rt.freeMemory());
Date d = null;
for (int i = 0; i < 10000; i++) {
d = new Date();
d  = null;
}
System.out.println(“After Memory = ” + rt.freeMemory());
System.gc();
System.out.println(“After GC Memory = “+ rt.freeMemory());
}
}
//Console
Total JVM memory: 5177344
Before Memory = 4660704
After Memory = 4403968
After GC Memory = 5011864

Java Gc terefinden obyektleri silmemisden evvel finalize () adli metodu istifade edir.hansiki butun classlar Obyekt class-dan onu inherit edir.Obyekt class-daki finalize () metodu 1 objenin referansi qalmadigi zaman gc terefinden cagirilir.System class-daki gc() metodu GC-ni calisdirir.System.gc() cagirilmasi ile Runtime.getRuntime().gc() cagirilmasi eynidir.Ancaq finalize() metodunu override etmek meslehet gorulmur.

Umumiyyetle GC-nin avantaji :

  • Programci yaddas idaresinden asili olmadan program yazabiler.
  • yaddas idaresi ucbatindan program cokmez.
dezavantaji ise:

  • Sisteme cox yuk getirir.
  • GC-nin ne zaman calisacagi tam olaraq bilinmir.

Hiç yorum yok:

Yorum Gönder