|
-savol. Ob'ekt qachon axlat yig'ish uchun mos bo'ladi? Gc muvofiq ob'ektni qanday yig'ishini tasvirlab bering?
|
bet | 4/6 | Sana | 10.09.2024 | Hajmi | 37,35 Kb. | | #270822 |
Bog'liq Memory Management in Java Interview Questions ( Answers)8-savol. Ob'ekt qachon axlat yig'ish uchun mos bo'ladi? Gc muvofiq ob'ektni qanday yig'ishini tasvirlab bering?
Ob'ektga hech qanday jonli oqim yoki statik havolalar orqali kirish imkoni bo'lmasa, axlat yig'ish yoki GC uchun mos bo'ladi.
Ob'ektning axlat yig'ish huquqiga ega bo'lishining eng oddiy holati, agar uning barcha havolalari null bo'lsa. GC uchun jonli tashqi havolasiz tsiklik bog'liqliklar ham mos keladi. Shunday qilib, agar A ob'ekti B ob'ekti va B ob'ekti A ob'ektiga havola qilsa va ularda boshqa jonli havola bo'lmasa, A va B ob'ektlari ham axlat yig'ish uchun mos bo'ladi.
Yana bir aniq holat - ota-ona ob'ekti null ga o'rnatilganda. Oshxona ob'ekti ichkarida muzlatgich va lavabo ob'ektiga murojaat qilsa va oshxona ob'ekti nolga o'rnatilgan bo'lsa, muzlatgich ham, lavabo ham ota-onasi, oshxonasi bilan birga axlat yig'ish huquqiga ega bo'ladi.
9-savol. Java kodidan axlat yig'ishni qanday ishga tushirasiz?
Siz Java dasturchisi sifatida Java-da axlat yig'ishni majburlay olmaysiz ; u faqat JVM Java yig'ish hajmiga asoslangan axlat yig'ish kerak deb hisoblasa, ishga tushadi.
Ob'ektni xotiradan olib tashlashdan oldin axlat yig'ish ipi ushbu ob'ektning finalize() usulini chaqiradi va har qanday tozalashni amalga oshirish imkoniyatini beradi. Ob'ekt kodining ushbu usulini ham chaqirishingiz mumkin, ammo bu usulni chaqirganingizda axlat yig'ish sodir bo'lishiga kafolat yo'q.
Bundan tashqari, JVM ga axlat yig'ish so'rovini yuborish uchun ishlatiladigan System.gc() va Runtime.gc() kabi usullar mavjud, ammo axlat yig'ish sodir bo'lishiga kafolat berilmaydi.
10-savol. Yangi ob'ektlarni saqlash uchun etarli bo'sh joy bo'lmasa nima bo'ladi?
Agar Heap'da yangi ob'ekt yaratish uchun xotira maydoni bo'lmasa, Java Virtual Mashina OutOfMemoryError yoki aniqrog'i java.lang.OutOfMemoryError to'p maydonini chiqaradi.
11-savol. Chiqindilarni yig'ish uchun yaroqli bo'lgan ob'ektni "tiriltirish" mumkinmi?
Ob'ekt axlat yig'ish uchun yaroqli bo'lganda, GC unda tugatish usulini ishga tushirishi kerak. Yakuniylashtirish usuli faqat bir marta ishlashi kafolatlanadi, shuning uchun GC ob'ektni yakunlangan deb belgilaydi va keyingi siklgacha dam beradi.
Yakuniylashtirish usulida siz ob'ektni texnik jihatdan "tiriltirishingiz" mumkin, masalan, uni statik maydonga belgilash orqali. Ob'ekt yana jonlanadi va axlat yig'ish uchun yaroqsiz bo'ladi, shuning uchun GC uni keyingi tsikl davomida yig'maydi.
Biroq, ob'ekt yakunlangan deb belgilanadi, shuning uchun u yana mos bo'lganda, yakunlash usuli chaqirilmaydi. Aslini olganda, siz ushbu "tirilish" nayrangini ob'ektning umri davomida faqat bir marta aylantira olasiz. Ehtiyot bo'ling, bu xunuk buzg'unchilikdan faqat nima qilayotganingizni bilsangizgina qo'llanilishi kerak - ammo bu hiylani tushunish GC qanday ishlashi haqida biroz ma'lumot beradi.
|
| |