Cari artikel di situs ini

Pemulung Memori (Garbage Collector)

Versi ramah cetakVersi ramah cetak

Hingga saat ini kita hanya berbicara tentang membuat objek. Lalu bagaimana menghapus objek? Pada bahasa pemrograman Java, destruksi (lawan konstruksi yang berarti menghancurkan) objek dilakukan secara otomatis.

Objek dibuat di dalam memori heap, dan bisa diakses hanya melalui referensi yang disimpan oleh variabel. Apa yang akan dilakukan jika variabel tersebut hilang, misalnya selesai melakukan tugas dalam subrutin, sehingga referensi ke objek tersebut juga hilang?

Perhatikan contoh berikut ini.

Murid mrd = new Murid("Joko Susanto");
mrd = null;

Di baris pertama, referensi objek baru akan disimpan pada variabel mrd. Pada baris berikutnya, isi variabel mrd diisi dengan null (atau referensi kosong), sehingga referensi ke objek yang baru kita buat menjadi hilang. Dalam kondisi seperti ini, komputer tidak bisa lagi menunjuk kepada objek yang baru dibuat tersebut, karena refernsinya hilang. Atau dengan kata lain, objek tersebut tidak akan pernah bisa dipakai lagi.

Java menggunakan prosedur yang dinamakan pemulung memori (garbage collector) untuk mengambil memori di mana suatu objek tidak lagi bisa diakses oleh program. Sistem komputer harus bertanggung jawab terhadap pengaturan memori, bukan programmer, untuk melacak objek yang menjadi "sampah". Pada contoh di atas, sangat mudah dilihat bahwa objek Murid telah menjadi sampah. Biasanya dalam kenyataan sehari-hari, sangat sulit untuk melacak mana objek sampah dan mana yang ukan. Jika suatu objek telah selesai digunakan, mungkin akan ada beberapa variabel yang masih menyimpan referensi ke objek tersebut. Suatu objek baru menjadi sampah apabila semua referensi yang merujuk pada objek tersebut hilang.

Dalam beberapa bahasa pemrograman lain, programmer diharuskan untuk mengatur sampahnya sendiri. Akan tetapi, mencoba mengatur penggunaan memori secara manual sangat sulit, dan sering menimbulkan bug yang tidak terduga. Programmer mungkin tidak sengaja menghapus objek tersebut, meskipun ada variabel lain yang masih merujuk pada objek tersebut. Ini disebut kesalahan pointer tak bertuan, dan kesalahannya akan fatal apabila objek yang akan diakses tak lagi berada di alamat memori tersebut.

Tipe kesalahan lain adalah kebocoran memori, yang mana programmer lupa menghapus objek yang tidak lagi digunakan. Ini akan berakibat pada penuhnya memori dengan sampah yang tidak bisa lagi diakses karena referensinya telah hilang. Jika dibiarkan, maka lambat laun seluruh memori komputer akan habis, sehingga komputer bisa berhenti total.

Karena Java memiliki pemulung memori, kesalahan seperti itu tidak mungkin terjadi. Pemulung memori sudah dibicarakan sejak lama, dan sudah digunakan pada beberapa bahasa pemrograman sejak tahun 1960-an. Anda mungkin bertanya kenapa tidak semua bahasa pemrograman menggunakan pemulung memori? Dulu, pemulung memori membutuhkan waktu pemrosesan yang lama, sehingga penggunaannya akan mengurangi kinerja program secara keseluruhan. Akan tetapi riset terbaru telah menemukan teknik pemulungan memori yang lebih canggih, dan ditambah dengan kecepatan komputer yang makin tinggi, pemulung memori menjadi suatu hal yang sangat realistis.

Berterima kasihlah kepada Java.

Komentar

Berterimakasi lah kepada java

Trimakasih java : )

Garbage Collector

Ada beberapa pertanyaan terkait materi garbage collector :

1. apakah garbage collector ini sudah otomatis tersetting pada setiap project java yang kita buat?

2. Apa bedanya orang yang menginstansi objek dengan cara

new ObjectThread();

dengan

ObjectThread pertama = new ObjectThread();

Apakah deklarasi pertama akan lebih menghemat memory dibanding dengan deklarasi yang kedua?

Operator new akan

Operator new akan menyadangkan memori untuk digunakan suatu objek, yang hasilnya adalah alamat memori tempat objek yang baru dibuat berada.

Untuk pernyataan pertama, alamat memori tidak disimpan, sehingga begitu dibuat langsung hilang dan objek yang baru dibuat tidak bisa lagi dilacak keberadaannya, dengan kata lain objek yang baru dibuat itu langsung diambil oleh garbage collector.

Pernyataan kedua adalah pernyataan yang lebih masuk akal.

Optimisasi alokasi memori pada dasarnya masuk kategori "early optimization" yang sebaiknya dihindari ketika membuat suatu program, karena bisa jadi hasil optimisasinya malah tidak bisa dimengerti oleh compiler yang malah membuat program kita tidak teroptimasi sama sekali.