Ingat apakah pengumpulan sampah di Jawa
Pengumpulan sampah ialah proses menuntut semula memori masa jalan penuh dengan memusnahkan objek yang tidak digunakan.
Kadang-kadang pengaturcara mungkin lupa untuk memusnahkan objek yang tidak berguna, dan memori yang diperuntukkan kepada mereka tidak dibebaskan. Semakin banyak memori sistem digunakan, dan akhirnya tiada lagi yang diperuntukkan. Aplikasi sedemikian mengalami "kebocoran memori".
Selepas titik tertentu, memori tidak lagi mencukupi untuk mencipta objek baharu dan program ditamatkan secara tidak normal disebabkan oleh OutOfMemoryError .
![](https://cdn.codegym.cc/images/article/3000851c-d7b0-48c1-a1b0-42fc199942d5/800.jpeg)
Pengumpulan sampah di Java ialah proses di mana program Java mengurus memori secara automatik. Program Java disusun menjadi kod bait yang berjalan pada Mesin Maya Java (JVM).
Apabila program Java dijalankan pada JVM, objek dicipta pada timbunan, iaitu bahagian memori yang diperuntukkan kepada mereka.
Semasa aplikasi Java sedang berjalan, objek baharu dicipta di dalamnya. Pada akhirnya, beberapa objek tidak lagi diperlukan. Kita boleh mengatakan bahawa pada bila-bila masa tertentu, ingatan timbunan terdiri daripada dua jenis objek.
- Langsung - Objek ini digunakan, ia dirujuk dari tempat lain.
- Mati - objek ini tidak digunakan di tempat lain, tiada rujukan kepadanya.
Pengumpul sampah menjumpai objek yang tidak digunakan ini dan mengeluarkannya untuk mengosongkan ingatan.
Pengumpulan sampah di Jawa adalah proses automatik . Pengaturcara tidak perlu menandai objek secara eksplisit untuk dipadamkan.
Setiap JVM boleh melaksanakan versi kutipan sampahnya sendiri. Walau bagaimanapun, pengumpul mesti mematuhi spesifikasi JVM standard untuk menangani objek yang terdapat dalam ingatan timbunan untuk menandakan atau mengenal pasti objek yang tidak boleh dicapai dan memusnahkannya melalui pemadatan.
Kebolehcapaian Objek
Untuk mengenali objek sebagai hidup, kehadiran pautan tidak mencukupi. Ini kerana sesetengah objek mati boleh merujuk kepada objek mati yang lain. Itulah sebabnya adalah perlu bahawa di antara semua rujukan kepada objek, harus ada sekurang-kurangnya satu daripada objek "hidup".
![Kebolehcapaian Objek](https://cdn.codegym.cc/images/article/eb12b7bc-7401-440e-a551-9b4461ba3b5d/800.jpeg)
Pengumpul sampah bekerja dengan konsep GC Roots ( akar pengumpulan sampah ) untuk membezakan antara objek hidup dan mati. Terdapat 100% objek hidup dan daripadanya terdapat pautan yang menghidupkan objek lain dan sebagainya.
Contoh akar tersebut:
- Kelas yang dimuatkan oleh pemuat kelas sistem.
- Strim langsung.
- Parameter kaedah yang sedang dilaksanakan dan pembolehubah tempatan.
- Objek yang digunakan sebagai monitor untuk penyegerakan.
- Objek yang disimpan dari kutipan sampah untuk tujuan tertentu.
- Pengumpul sampah menelusuri keseluruhan graf objek dalam ingatan, bermula pada akar ini dan mengikut rujukan kepada objek lain.
Langkah-langkah pengumpulan sampah di Jawa
Pelaksanaan kutipan sampah standard mempunyai tiga langkah.
1. Tandakan objek sebagai hidup
Pada ketika ini, pemungut sampah (GC) mesti mengenal pasti semua objek hidup dalam ingatan dengan melintasi graf objek.
Apabila ia melawat objek, ia menandakannya sebagai tersedia dan oleh itu hidup. Semua objek yang tidak boleh diakses daripada akar GC dianggap sebagai calon untuk kutipan sampah.
![](https://cdn.codegym.cc/images/article/483e8406-ce8f-458a-8217-c6c2e2c70b2c/800.jpeg)
2. Membersihkan benda mati
Selepas fasa markup, ruang ingatan diduduki oleh objek hidup (dilawati) atau mati (tidak dilawati). Fasa pembersihan membebaskan serpihan memori yang mengandungi objek mati ini.
![](https://cdn.codegym.cc/images/article/f10e166d-d9bf-462d-9d65-2c81df1b3457/800.jpeg)
3. Susunan padat objek yang tinggal dalam ingatan
Objek mati yang dikeluarkan pada fasa sebelumnya tidak perlu berada di sebelah satu sama lain. Oleh itu, anda berisiko mendapat ruang memori yang berpecah-belah (separuh kosong).
Tetapi, sudah tentu, setelah menyediakannya, adalah mungkin untuk memampatkan memori pada masa ini apabila pemungut sampah mengeluarkan objek mati. Selebihnya akan ditempatkan di blok bersebelahan pada permulaan timbunan.
Proses pemadatan menjadikannya lebih mudah untuk memperuntukkan memori secara berurutan untuk objek baharu.
![](https://cdn.codegym.cc/images/article/7008ce12-e886-44e5-8812-8431b4f7c741/800.jpeg)