Memahami Garbage Collection Java: Cara Kerja dan Mengapa Penting
Apa Itu Garbage Collection Java?
Garbage Collector (GC) Java secara otomatis mengelola memori, membebaskan pengembang dari pengalokasian manual. Ketika objek tidak lagi memiliki referensi hidup, GC mereklam ruang heap-nya, mencegah kebocoran memori yang dapat menyebabkan aplikasi macet.
Di Java, objek dibuat pada heap melalui operator new. Runtime melacak referensi; saat referensi terakhir hilang, objek menjadi layak untuk dikoleksi. GC berjalan secara berkala di latar belakang, membuat kode Anda lebih sederhana dan lebih aman.
Berbeda dengan C, di mana free() diperlukan, Java menghilangkan risiko pointer yang riang dan perilaku tidak terdefinisi, memperkuat keandalan dan keamanan.
Semua objek di Java tinggal di bagian heap memori – area yang dipindai oleh GC.
Contoh Praktis: Melihat GC dalam Aksi
Langkah 1 – Salin kode di bawah ini ke editor:
class Student { int a; int b; public void setData(int c, int d) { a = c; b = d; } public void showData() { System.out.println("Nilai a = " + a); System.out.println("Nilai b = " + b); } public static void main(String[] args) { Student s1 = new Student(); Student s2 = new Student(); s1.setData(1, 2); s2.setData(3, 4); s1.showData(); s2.showData(); //Student s3; //s3 = s2; //s3.showData(); //s2 = null; //s3.showData(); //s3 = null; //s3.showData(); } }
Langkah 2 – Kompilasi dan jalankan program. Awalnya, dua objek Student dan dua variabel referensi dibuat. Lihat diagram di bawah ini.
Langkah 3 – Buat komentar baris 20‑22, lalu jalankan ulang. Sekarang s3 menunjuk ke objek yang sama dengan s2. Diagram menunjukkan kedua referensi berbagi satu objek.
Langkah 4 – Buat komentar baris 23‑24. Mengatur s2 ke null meninggalkan s3 sebagai referensi tunggal, sehingga objek masih aktif.
Langkah 5 – Buat komentar baris 25‑26. Dengan s2 dan s3 diatur ke null, objek menjadi layak untuk GC. Diagram akhir mengilustrasikan kondisi ini.
Membuat Objek Layak untuk Dikoleksi
Berikan variabel referensinya ke null. GC kemudian akan mereklam memori saat berjalan.
Tipe primitif (int, double, dll.) bukan objek dan tidak dapat bernilai null.
Catatan: Finalizer eksplisit tidak direkomendasikan; andalkan pada GC.