Ingat apa pengumpulan sampah di Jawa

Pengumpulan sampah adalah proses mendapatkan kembali memori runtime penuh dengan menghancurkan objek yang tidak terpakai.

Terkadang pemrogram mungkin lupa untuk menghancurkan objek yang tidak berguna, dan memori yang dialokasikan untuknya tidak dibebaskan. Semakin banyak memori sistem yang digunakan, dan akhirnya tidak ada lagi yang dialokasikan. Aplikasi semacam itu mengalami "kebocoran memori".

Setelah titik tertentu, tidak ada lagi cukup memori untuk membuat objek baru dan program berhenti secara tidak normal karena OutOfMemoryError .

Pengumpulan sampah di Java adalah proses dimana program Java mengelola memori secara otomatis. Program Java dikompilasi menjadi bytecode yang berjalan di Java Virtual Machine (JVM).

Saat program Java berjalan di JVM, objek dibuat di heap, yang merupakan bagian dari memori yang dialokasikan untuknya.

Saat aplikasi Java sedang berjalan, objek baru dibuat di dalamnya. Pada akhirnya, beberapa objek tidak lagi dibutuhkan. Kita dapat mengatakan bahwa pada waktu tertentu, tumpukan memori terdiri dari dua jenis objek.

  • Langsung - Objek ini digunakan, mereka direferensikan dari tempat lain.
  • Mati - objek ini tidak digunakan di tempat lain, tidak ada referensi untuknya.

Pengumpul sampah menemukan objek yang tidak terpakai ini dan membuangnya untuk mengosongkan memori.

Pengumpulan sampah di Jawa adalah proses otomatis . Pemrogram tidak perlu menandai objek secara eksplisit untuk dihapus.

Setiap JVM dapat mengimplementasikan versi pengumpulan sampahnya sendiri. Namun, kolektor harus menyesuaikan dengan spesifikasi JVM standar untuk menangani objek yang ada di memori heap untuk menandai atau mengidentifikasi objek yang tidak dapat dijangkau dan menghancurkannya melalui pemadatan.

Jangkauan Objek

Untuk mengenali suatu objek sebagai hidup, keberadaan tautan saja tidak cukup. Ini karena beberapa benda mati dapat merujuk ke benda mati lainnya. Itulah mengapa di antara semua referensi ke suatu objek, harus ada setidaknya satu dari objek "hidup".

Jangkauan Objek

Pengumpul sampah bekerja dengan konsep GC Roots ( akar pengumpulan sampah ) untuk membedakan benda hidup dan benda mati. Ada 100% objek hidup dan darinya ada tautan yang menganimasikan objek lain dan seterusnya.

Contoh akar tersebut:

  • Kelas yang dimuat oleh pemuat kelas sistem.
  • Streaming langsung.
  • Parameter metode yang sedang dijalankan dan variabel lokal.
  • Objek yang digunakan sebagai monitor untuk sinkronisasi.
  • Objek yang disimpan dari pengumpulan sampah untuk tujuan tertentu.
  • Pengumpul sampah menelusuri seluruh grafik objek dalam memori, mulai dari akar ini dan mengikuti referensi ke objek lain.

Langkah-langkah pengumpulan sampah di Jawa

Implementasi pengumpulan sampah standar memiliki tiga langkah.

1. Tandai objek sebagai hidup

Pada titik ini, pengumpul sampah (GC) harus mengidentifikasi semua benda hidup di memori dengan menelusuri grafik objek.

Ketika ia mengunjungi suatu objek, ia menandainya sebagai tersedia dan karena itu hidup. Semua objek yang tidak dapat diakses dari root GC dianggap sebagai kandidat untuk pengumpulan sampah.

2. Membersihkan benda mati

Setelah fase markup, ruang memori ditempati oleh benda hidup (dikunjungi) atau benda mati (tidak dikunjungi). Fase pembersihan membebaskan fragmen memori yang berisi benda mati ini.

3. Pengaturan kompak dari objek yang tersisa di memori

Benda mati yang dipindahkan pada fase sebelumnya tidak perlu bersebelahan. Dengan demikian, Anda berisiko mendapatkan ruang memori yang terfragmentasi (setengah kosong).

Tapi, tentu saja, dengan menyediakan ini, dimungkinkan untuk memadatkan memori pada saat pengumpul sampah membuang benda mati. Sisanya akan ditempatkan di blok yang berdekatan di awal heap.

Proses pemadatan membuatnya lebih mudah untuk mengalokasikan memori secara berurutan untuk objek baru.