Ada empat algoritma pengumpulan sampah umum di JVM:
Algoritma Mark-Clearing (Mark-Sheep);
Menyalin algoritma (menyalin);
Mark-Compact;
Koleksi generasi;
Mari kita perkenalkan satu per satu:
1. Algoritma Mark-Clearing (Mark-Sheep)
Ini adalah algoritma pengumpulan sampah paling dasar. Algoritma dibagi menjadi dua tahap: "Marking" dan "Clearing": Pertama, semua objek yang perlu didaur ulang ditandai, dan semua objek yang ditandai secara seragam didaur ulang setelah penandaan selesai. Kerugian utamanya adalah dua: satu adalah masalah efisiensi, dan efisiensi penandaan dan pembersihan tidak tinggi; Yang lainnya adalah masalah ruang, setelah penandaan dibersihkan, sejumlah besar fragmen memori terputus akan dihasilkan. Terlalu banyak fragmen ruang dapat menyebabkan ruang kontinu besar yang tidak mencukupi ketika mengalokasikan benda -benda besar, dan tindakan pengumpulan sampah lain harus dipicu terlebih dahulu.
Diagram Algoritma Mark-Clear
2. Salinan Algoritma (Menyalin)
Untuk menyelesaikan masalah efisiensi, dengan algoritma "salin", ia membagi memori yang tersedia menjadi dua blok dengan ukuran yang sama. Gunakan hanya satu bagian dalam satu waktu. Ketika satu bagian ruang digunakan, salin objek yang masih payah ke bagian lain, dan kemudian bersihkan ruang memori yang baru digunakan pada satu waktu. Hal ini memungkinkan untuk mendaur ulang salah satu bagian setiap saat, sehingga fragmentasi memori dan situasi kompleks lainnya tidak perlu dipertimbangkan ketika mengalokasikan memori. Implementasi sederhana dan operasi yang efisien. Tetapi biaya algoritma ini adalah untuk mengurangi memori menjadi setengah dari yang asli, yang agak terlalu mahal. Faktanya, 98% objek dalam generasi baru hidup dan mati, sehingga tidak perlu membagi memori dalam rasio 1: 1, tetapi membagi memori menjadi ruang eden yang lebih besar dan dua ruang penyintas yang lebih kecil, setiap kali menggunakan ruang Eden dan salah satu ruang yang selamat. Saat didaur ulang, salin benda-benda yang masih payah di Eden dan selamat ke Suivivor lain pada satu waktu, dan akhirnya membersihkan ruang Eden dan Survivor yang baru digunakan.
Salin Diagram Algoritma
3. Mark-Compact
Ketika tingkat kelangsungan hidup objek tinggi, algoritma replikasi dan pengumpulan harus melakukan lebih banyak operasi replikasi, dan efisiensinya akan menjadi lebih rendah. Lebih penting lagi, jika Anda tidak ingin menyia-nyiakan 50% dari ruang, Anda harus memiliki ruang tambahan untuk mengalokasikan jaminan untuk menangani situasi ekstrem di mana semua objek dalam memori setengah zona hidup 100% hidup, sehingga algoritma ini tidak dapat langsung digunakan pada lansia.
Oleh karena itu, orang mengusulkan algoritma "compact" lainnya. Karena objek pada lansia memiliki siklus bertahan hidup yang panjang, beberapa orang mengusulkan algoritma "Mark-Compact". Proses penandaan sama dengan "pembersihan tanda", tetapi saat membersihkan benda mati, benda-benda yang masih ada akan diurutkan, yang dapat mengurangi ruang yang terfragmentasi.
Diagram algoritma Mark-Organisasi
4. Koleksi generasi
Saat ini, pengumpulan sampah untuk mesin virtual komersial mengadopsi algoritma "koleksi generasi". Tidak ada ide baru dalam algoritma ini, tetapi ingatan dibagi menjadi beberapa bagian sesuai dengan siklus kelangsungan hidup yang berbeda dari objek. Secara umum, tumpukan Java dibagi menjadi generasi baru dan generasi lama, sehingga algoritma pengumpulan yang paling tepat dapat digunakan sesuai dengan karakteristik setiap generasi. Pada generasi baru, setiap kali koleksi sampah dikumpulkan, sejumlah besar benda ditemukan mati dan hanya sejumlah kecil yang bertahan. Kemudian gunakan algoritma salin, dan koleksi dapat diselesaikan dengan sejumlah kecil biaya salinan. Pada orang tua, karena tingkat kelangsungan hidup objek tinggi dan siklusnya panjang, algoritma "Mark-Tidy" atau "Mark-Clear" digunakan untuk mendaur ulangnya.
Pengantar algoritma pengumpulan sampah umum di JVM adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.