Jika sebelum anda mengenal Java, anda terlebih dahulu mengenal bahasa C/C++, maka pasti anda akan mencari fitur-fitur yang berhubungan dengan pointer. Ya, tugas sebuah pointer di C/C++ adalah untuk mengalokasikan memory sesuai yang ditunjuk pointer itu sendiri. Selain itu mungkin anda juga mencari fitur method free() atau operator delete pada C/C++ dalam penghancuran isi dari memori yang tak terpakai. Perlu diketahui, Java tidak mendukung adanya pointer, method free(), atau operator delete.
Jadi, apakah ini sebuah bug/kelemahan dari Java ?
Tentu saja tidak.
Alasannya, Java sebenarnya dirancang untuk berjalan di atas Java Runtime Environment (JRE) dan mungkin saja akan dieksekusi di atas firewall jika berbentuk applet. Sehingga tentu tidak akan lagi membutuhkan sebuah pointer. Java menyediakan suatu mekanisme yang disebut dengan garbage collection, yaitu :
"mekanisme dalam melakukan dealokasikan memory secara otomatis"
Jika anda sebelumnya telah belajar meng-inisialisasi objek dan membuat variabel array, maka sebenarnya anda telah belajar mengalokasikan objek dan array yang anda buat ke dalam memory (seperti tugas sebuah pointer di C/C++) karena fungsi dari operator new di bahasa Java adalah mengalokasikan objek dan array ke memory.
NamaClass namaObject = new NamaClass();
tipeData namaArray[] = new tipeData[jumlah_elemen]
(ini adalah inisialisasi objek dan pembuatan array. Perhatikan penggunaan operator new)
Setelah kita tahu mekanisme pengalokasiannya, lalu bagaimana melakukan pen-dealokasian objek dan array dari memory? Tentu saja dilakukan dengan mekanisme garbage collection. Java akan melakukannya secara otomatis. Cara kerja sederhananya sebagai berikut:
Interpreter di Java akan tahu persis dimana objek dan array dialokasikan. Ia juga akan tahu variabel-variabel lokal yang merujuk pada objek atau array dan ia juga akan tahu objek atau array yang merujuk objek atau array yang lain. Ini berarti Interpreter akan mengetahui jika suatu objek atau array tidak lagi memiliki referensi atau akses kemana pun lagi. Maka, Interpreter akan mengasumsikan objek atau array tersebut sudah tidak diperlukan lagi. Sehingga Interpreter akan menghancurkannya secara aman dan menggunakan ruang memory yang digunakan sebelumnya untuk dimanfaatkan kepentingan lain. secara aman dan menggunakan ruang memory yang digunakan sebelumnya untuk dimanfaatkan kepentingan lain.
Sebenarnya tidak hanya objek atau array saja yang bisa di-reklamasi (istilah untuk penghancuran memory). Suatu siklus objek yang saling merujuk satu sama lain, tetapi tidak merujuk ke objek yang aktif, juga akan di-reklamasi oleh Interpreter.
Sebenarnya, garbage collection bukanlah suatu inovasi baru dari bahasa Java. Ini sebelumnya telah bertahun-tahun digunakan dalam bahasa pemrograman seperti Lisp. Fakta bahwa kita tidak perlu lagi merisaukan penghancur setiap objek di memory, adalah keunggulan dari Java itu sendiri dan ini menunjukkan Java lebih aman dari bug dari bahasa pemrograman tanpa garbage collection