|
-savol. Avlodlar uchun axlat yig'ish qanday ishlashini batafsil tasvirlab bering
|
bet | 3/6 | Sana | 10.09.2024 | Hajmi | 37,35 Kb. | | #270822 |
Bog'liq Memory Management in Java Interview Questions ( Answers)7-savol. Avlodlar uchun axlat yig'ish qanday ishlashini batafsil tasvirlab bering
Avlodlar bo'yicha axlat yig'ish qanday ishlashini to'g'ri tushunish uchun, avvalo, avlodlar axlat yig'ish jarayonini osonlashtirish uchun Java to'plami qanday tuzilganligini eslab qolish kerak .
Uyum kichikroq bo'shliqlarga yoki avlodlarga bo'linadi. Bu bo'shliqlar yosh avlod, keksa yoki doimiy avlod va doimiy avloddir.
Yosh avlod yangi yaratilgan ob'ektlarning ko'pchiligiga mezbonlik qiladi . Ko'pgina ilovalarni empirik o'rganish shuni ko'rsatadiki, ko'pchilik ob'ektlar tezda qisqa umr ko'radi va shuning uchun tez orada yig'ish uchun yaroqli bo'ladi. Shu sababli, yangi ob'ektlar bu erda o'z sayohatlarini boshlaydilar va ular ma'lum bir "yosh" ga erishgandan keyingina eski avlod makoniga "ko'tariladi".
Avlod axlat yig'ishdagi "yosh" atamasi ob'ekt saqlanib qolgan yig'ish davrlari sonini anglatadi .
Yosh avlod maydoni yana uchta bo'shliqqa bo'lingan: Eden maydoni va Survivor 1 (s1) va Survivor 2 (s2) kabi ikkita omon qolgan bo'shliq.
Qadimgi avlod xotirada ma'lum bir "yosh" dan ko'proq vaqt yashagan ob'ektlarga ega . Yosh avloddan axlat yig'ishdan omon qolgan ob'ektlar ushbu maydonga targ'ib qilinadi. Odatda yosh avlodga qaraganda kattaroqdir. Kattaroq bo'lgani uchun, axlat yig'ish yosh avlodga qaraganda qimmatroq va kamroq sodir bo'ladi.
Doimiy avlod yoki odatda PermGen deb ataladigan dasturda ishlatiladigan sinflar va usullarni tavsiflash uchun JVM tomonidan talab qilinadigan metama'lumotlar mavjud . Shuningdek, u interned satrlarni saqlash uchun string hovuzini ham o'z ichiga oladi. U JVM tomonidan dastur tomonidan ishlatiladigan sinflar asosida ish vaqtida to'ldiriladi. Bundan tashqari, bu yerda platforma kutubxonasi sinflari va usullari saqlanishi mumkin.
Birinchidan, har qanday yangi ob'ektlar Eden maydoniga ajratiladi . Omon qolganlar uchun ikkala joy ham bo'sh boshlanadi. Eden maydoni to'lganida, kichik axlat yig'ish boshlanadi. Yo'naltirilgan ob'ektlar birinchi omon qolgan joyga ko'chiriladi. Havola qilinmagan ob'ektlar o'chiriladi.
Keyingi kichik GC davomida xuddi shu narsa Eden fazosi bilan sodir bo'ladi. Havola qilinmagan ob'ektlar o'chiriladi va havola qilingan ob'ektlar omon qolgan joyga ko'chiriladi. Biroq, bu holda, ular ikkinchi omon qolgan bo'shliqqa (S2) ko'chiriladi.
Bundan tashqari, birinchi omon qolgan fazodagi (S1) so'nggi kichik GC ob'ektlari o'zlarining yoshini oshirib, S2 ga ko'chiriladi. Omon qolgan barcha ob'ektlar S2 ga ko'chirilgandan so'ng, S1 va Eden bo'shliqlari tozalanadi. Bu vaqtda S2 turli yoshdagi ob'ektlarni o'z ichiga oladi.
Keyingi kichik GKda xuddi shu jarayon takrorlanadi. Biroq, bu safar omon qolganlar joylari o'zgaradi. Yo'naltirilgan ob'ektlar Eden va S2 dan S1 ga ko'chiriladi. Omon qolgan ob'ektlar eskirgan. Eden va S2 tozalandi.
Har bir kichik axlat yig'ish siklidan keyin har bir ob'ektning yoshi tekshiriladi. Ma'lum bir ixtiyoriy yoshga etganlar, masalan, 8 yosh avloddan keksa yoki xizmatchi avlodga ko'tariladi. Keyingi barcha kichik GC tsikllari uchun ob'ektlar eski avlod maydoniga ko'tarilishda davom etadi.
Bu yosh avlodda axlat yig'ish jarayonini deyarli charchatadi. Oxir-oqibat, bu makonni tozalaydigan va siqib chiqaradigan eski avlodda katta axlat yig'ish amalga oshiriladi. Har bir asosiy GC uchun bir nechta kichik GC mavjud.
|
| |