Alokasi dan pelepasan memori di Java dan C# dikelola secara otomatis oleh mesin virtual. Saya sebelumnya telah memperkenalkan metode daur ulang objek GC di CLR, yang merupakan strategi daur ulang memori berbasis generasi. Faktanya, di Java, strategi daur ulang objek JVM juga didasarkan pada gagasan pembagian generasi. Tujuan dari ini adalah untuk meningkatkan sampah
Kinerja daur ulang menghindari keterlambatan respons program yang disebabkan oleh memeriksa semua objek di tumpukan, karena ketika JVM mengeksekusi GC, itu menghentikan kata, yaitu, mengakhiri pengoperasian utas lain, dan hanya mengembalikan operasi utas lain setelah daur ulang selesai. Gagasan yang didasarkan pada divisi generasi adalah: JVM hanya membutuhkan sebagian kecil dari memori setiap kali ia mengeksekusi pengumpul sampah.
Referensi objek diperiksa, dan sejumlah kecil objek ini memiliki siklus hidup yang lebih pendek, yang mempercepat kinerja pengumpulan sampah. Di bawah ini kami akan memperkenalkan strategi dasar algoritma pemulihan memori berbasis generasi di Java di masa depan:
1. Divisi Generasi memori heap JVM
Dalam strategi pemulihan memori berbasis generasi, ruang tumpukan biasanya dibagi menjadi 3 generasi, generasi muda, generasi tua (atau generasi bertenor), dan generasi permanen. Di antara generasi muda, ada tiga area kecil: Eden, S0, dan S1, seperti yang ditunjukkan pada gambar di bawah ini:
Di antara mereka, objek baru selalu ditugaskan untuk generasi usia. Ketika ruang generasi muda diisi, koleksi sampah perlu dilakukan, yaitu, GC kecil dieksekusi, untuk mendaur ulang benda -benda yang tidak lagi dirujuk, dan pada saat yang sama meningkatkan usia objek yang masih hidup. Objek yang masih hidup dalam generasi usia memiliki bidang identifikasi usia. Begitu mereka mencapai ambang batas tertentu, benda -benda yang masih bertahan akan dipromosikan ke ruang generasi lama.
Ruang generasi lama digunakan untuk menyimpan benda -benda yang telah bertahan lama, yaitu objek dengan siklus hidup yang panjang. Setelah benda -benda yang masih hidup di ruang generasi muda mencapai ambang usia tertentu, itu akan secara otomatis dipromosikan ke generasi lama. Ketika ruang generasi lama dipenuhi dengan benda -benda, Mayor GC akan dieksekusi sekali. Dibandingkan dengan GC kecil, jumlah eksekusi GC utama jauh lebih sedikit daripada GC kecil. Pada saat yang sama, Mayor GC mengeksekusi lebih lama dari Minor GC. Karena melibatkan lebih banyak pemindaian objek. Gagasan generasi ini juga didasarkan pada pilihan yang lebih baik dalam praktiknya yang dalam praktiknya, objek yang baru dialokasikan memiliki siklus hidup yang lebih pendek dan objek lansia memiliki siklus hidup yang lebih lama.
Pada saat yang sama, ketika Minor GC dan Mayor GC melakukan koleksi sampah, mereka mengambil acara Stop the World, yaitu, mengakhiri utas yang sedang berjalan dan memulihkan semua utas ketika GC dieksekusi.
Untuk memori generasi permanen, ini terutama digunakan untuk menyimpan informasi metadata yang relevan, informasi kelas dan metode. Ketika kelas tidak lagi digunakan, itu akan didaur ulang. Ketika GC penuh dieksekusi, memori generasi permanen akan dipindai untuk pengumpulan sampah.
2. Proses pemrosesan pengumpulan sampah berbasis generasi
Pertama, pada awalnya, objek baru ditugaskan ke area Eden, S0 dan S1 kosong. Ketika ruang di Eden diisi, lakukan Minor GC sekali. Kolektor sampah akan memindahkan objek yang direferensikan ke area S0, dan objek yang tidak lagi dirujuk akan dihapus. Pada saat yang sama, usia objek yang masih hidup adalah 1. Setelah GC diidentifikasi, area Eden dan S1 kosong seperti yang ditunjukkan pada gambar di bawah ini.
Lain kali Minor GC dieksekusi, sama dengan langkah -langkah eksekusi sebelumnya, satu -satunya perbedaan adalah bahwa objek yang direferensikan, yaitu, objek yang masih hidup, akan dipindahkan ke area S1, dan usia objek yang bertahan di daerah S0 akan meningkat sebesar 1 dan menjadi 2, seperti yang ditunjukkan pada gambar di bawah ini.
Ketika Minor GC dieksekusi lagi, objek yang masih hidup akan dipindahkan ke area S0 dan menambahkan 1 ke usia objek yang masih hidup seperti yang ditunjukkan pada gambar di bawah ini
Ketika GC minor akhirnya dieksekusi, ditemukan bahwa objek yang masih hidup di S1 mencapai 8 (dengan asumsi ambang batas diatur ke 8), dan objek akan dipromosikan ke memori usia tua, seperti yang ditunjukkan pada gambar di bawah ini.
Z
Ketika ruang tumpukan tua dipenuhi dengan benda -benda, Mayor GC akan dieksekusi sekali, yang akan menghapus objek bahwa tumpukan lama tidak lagi dirujuk, dan pada saat yang sama, mengompres ruang. Seperti yang ditunjukkan pada gambar di bawah ini.
Diskusi singkat di atas tentang strategi daur ulang sampah 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.