Kamis, 15 Desember 2011

GARBAGE COLLECTOR

Garbage Collector adalah mekanisme JVM untuk menghapus object dari memory kalau sudah tidak dibutuhkan. Garbage collector adalah fitur JVM yang sangat penting karena programmer tidak perlu lagi menulis code secara eksplisit untuk menghapus object seperti pada C/C++. Tugas utama Garbage Collector adalah memastikan heap mempunyai cukup ruang selama eksekusi aplikasi dengan menghapus object dalam heap yang sudah tidak digunakan lagi.

Garbage Collector sepenuhnya dikontrol oleh JVM kapan berjalan, ada cara untuk menganjurkan Garbage Collector berjalan, tapi anjuran ini bisa dijalankan oleh JVM bisa juga tidak dijalankan oleh JVM.

Object yang sudah tidak digunakan lagi adalah object yang tidak dapat lagi diakses oleh thread yang masih hidup. Contoh membuat object tidak dapat lagi diakses oleh thread yang masih hidup dengan mengeset variable yang memegang object tersebut menjadi null.

Date d = new Date();
d = null;

Cara yang lain dengan mengganti nilai variable dengan object lain, sehingga object sebelumnya tidak dapat diakses.

Date d = new Date();
d = new Date();

Variable lokal akan dihapus oleh Garabage Collector, setelah eksekusi method selesai.

import java.util.Date;
public class GarbageCollector{
           public static void main(String[] args){
                     Date d =getDate();
                     System.out.println(d);
                     d = null;
          }
          public static Date getDate(){
                     StringBuffer buffer = new StringBuffer("Garbage Collectable");
                     Date date = new Date();
                     return date;
          }
}

object StringBuffer akan dihapus setelah method getDate selesai dieksekusi, sedangkan object Date tidak terhapus karena referencenya dipegang oleh variable d pada method lain.

Cara menganjurkan jalan Garbage Collector adalah dengan  cara memanggil method gc dari class System, System.gc(); , pemanggilan ini lazim pada aplikasi java ME.

Eksperimen pemanggilan Garbage Collector langsung jalan atau tidak.

import java.util.Date;
public class EksperimenGarabageCollector{
           public static void main(String[] args){
                     Runtime rt  = Runtime.getRuntime();
                     System.out.println("jumlah memory awal : " +rt.totalMemory());
                     for(int i=0; i < 1000000; i++){
                             Date d = new Date();
                             d = null;
                     } 
                     System.out.println("Jumlah memory yang tersedia  sebelum gc : " + rt.freeMemory());
                     System.gc();
                     System.out.println("Jumlah memory yang tersedia setelah gc : " + rt.freeMemory());
          }
}

jumlah memory awal : 7864320
Jumlah memory yang tersedia  sebelum gc : 6980416
Jumlah memory yang tersedia setelah gc : 7678080

dalam hal ini garbage collector jalan setelah pemanggialn System.gc()

Tidak ada komentar:

Posting Komentar