JavaRush /Java blogi /Random-UZ /Kofe tanaffusi №60. Java (JVM) da axlat yig'ish qanday is...

Kofe tanaffusi №60. Java (JVM) da axlat yig'ish qanday ishlaydi. Texnik intervyuda bahor haqida 15 ta muhim savol

Guruhda nashr etilgan

Java (JVM) da axlat yig'ish qanday ishlaydi

Manba: DZone

Java-da axlat yig'ish jarayoni

Java axlat yig'ish avtomatik ravishda xotirani ajratadi va bo'shatadi, shuning uchun ishlab chiquvchilar xotirani boshqarish uchun alohida dastur yozishlari shart emas, bu Java-da dasturlashning asosiy afzalliklaridan biridir. Har safar Java dasturi JVM da ishlaganda, ob'ektlar uyada yaratiladi va dasturga ajratilgan xotiraning bir qismini ifodalaydi. Vaqt o'tishi bilan ba'zi narsalar endi kerak bo'lmaydi. Axlat yig'uvchi ushbu foydalanilmagan narsalarni topadi va xotirani bo'shatish uchun ularni olib tashlaydi. Kofe tanaffusi №61.  Java (JVM) da axlat yig'ish qanday ishlaydi.  Texnik intervyuda bahor haqida 15 ta muhim savol - 1Axlat yig'uvchi xotira to'plamini baholagandan so'ng, qaysi ob'ektlar ishlatilayotgan va qaysi biri yo'qligini aniqlaydi va foydalanilmagan narsalarni olib tashlaydi. Ishlatilgan yoki havola qilingan ob'ekt dasturingizning ba'zi bir qismi hali ham ushbu ob'ektga ko'rsatgichni saqlab turishini anglatadi. Agar ob'ekt endi ishlatilmasa yoki unga havola etilmasa, u holda dasturning biron bir qismi unga havola qilinmaydi. Shunday qilib, havola qilinmagan ob'ekt tomonidan ishlatiladigan xotirani axlat yig'ish orqali bo'shatish mumkin. Kofe tanaffusi №61.  Java (JVM) da axlat yig'ish qanday ishlaydi.  Texnik intervyuda bahor haqida 15 ta muhim savol - 2Xotirani bo'shatish uchta asosiy jarayon bilan tavsiflanishi mumkin:
  1. Belgilash.
  2. Oddiy olib tashlash.
  3. Siqilish bilan olib tashlash.
Belgilash - axlat yig'uvchi tomonidan foydalaniladigan va foydalanilmaydigan xotira qismlarini aniqlash jarayoni. Belgilash odatda birinchi qadamdir. Oddiy o'chirish - havola qilinmagan ob'ektlarni o'chirish, havola qilingan ob'ektlar va ko'rsatkichlarni bo'sh joyda qoldirish jarayoni. Siqishni yo'q qilish - havola qilinmagan ob'ektlarni o'chirishdan tashqari, u qolgan havola qilingan ob'ektlarni siqib chiqaradi, yangi xotira ajratishni ancha oson va tezroq qilish uchun ob'ektlarni birga ko'chiradi.

JVM yig'ma xotirasi

Kofe tanaffusi №61.  Java (JVM) da axlat yig'ish qanday ishlaydi.  Texnik intervyuda bahor haqida 15 ta muhim savol - 3

Yosh avlod

Yangi yaratilgan ob'ektlar Yosh avloddan boshlanadi. U bolalar bog'chasi deb ham ataladi, chunki bu erda yangi ob'ektlar yashay boshlaydi. Yosh avlod barcha yangi ob'ektlar boshlanadigan Eden Space va ikkita "Omon qolganlar" maydoniga bo'lingan, bu erda ob'ektlar bitta axlat yig'ish tsiklida omon qolgandan so'ng Adandan ko'chiriladi. Ob'ektlar Yosh avlod axlat yig'uvchisi tomonidan yig'ilganda ular qayta axlat yig'ishga sabab bo'ladi. Eden Space Barcha yangi ob'ektlar birinchi navbatda Eden Space-da yaratilgan. Kichik axlat yig'ish JVM tomonidan belgilangan chegaraga yetganda yonib ketadi. Ko'rsatilgan ob'ektlar Eden Space'dan birinchi saqlash joyiga ('Eden' va 'dan' -> 'to') ko'chiriladi. Eden Space tozalanganda havola qilinmagan ob'ektlar o'chiriladi. Survivor 0 (S0) va Survivor 1 (S1) Ikkala omon qolgan (From va to) maydonlari bo'sh boshlanadi. Chiqindilarni yig'ish yana sodir bo'lganda, barcha havola qilingan ob'ektlar qolgan joyga ko'chiriladi. Chiqindilarni yig'ish tugagach, omon qolganlarning joylari (ismlari) "dan" va "to"ga almashtiriladi. Agar avvalgi axlat yig'ish paytida S1 "to" rolida bo'lgan bo'lsa, endi S1 ​​to'ldi va "dan" ga aylanadi. Shunga ko'ra, agar S0 bo'sh bo'lsa, u "to"ga aylanadi.

Eski avlod

Kichkina axlat yig'ishdan so'ng, eskirgan ob'ektlar ma'lum bir yosh chegarasiga yetganda (zamonaviy JVMlar uchun standart chegara axlat yig'ishning 15 tsikliga o'rnatiladi), ular uzoq muddatli ob'ektlar bilan birga yosh avloddan eskisiga o'tadi. Kichik axlat yig'uvchilar paydo bo'lishda, ob'ektlar Eski avlod maydoniga o'tishda davom etar ekan, u to'ldirila boshlaydi va katta axlat yig'ish sodir bo'ladi. Asosiy axlat yig'ish ob'ektlar Eski avlod axlat yig'uvchisi tomonidan yig'ilganda sodir bo'ladi. Kofe tanaffusi №61.  Java (JVM) da axlat yig'ish qanday ishlaydi.  Texnik intervyuda bahor haqida 15 ta muhim savol - 4

Doimiy avlod

Sinflar va usullar kabi metama'lumotlar Doimiy avlodda saqlanadi. Endi ishlatilmaydigan sinflar undan axlat yig'uvchi tomonidan olib tashlanishi mumkin. To'liq axlat yig'ish paytida barcha avlodlardan foydalanilmagan ob'ektlar yig'iladi.Kofe tanaffusi №61.  Java (JVM) da axlat yig'ish qanday ishlaydi.  Texnik intervyuda bahor haqida 15 ta muhim savol - 5

Axlat yig'ish turlari

Uyumning turli qismlarini tozalaydigan axlat yig'ishlari odatda Kichik, Katta va To'liq axlat yig'ishlari deb ataladi. Ammo Minor, Major va To'liq atamalar to'g'ri ta'rifsiz keng qo'llanilganligi sababli, biz axlat yig'ishning barcha turlarini tushuntirishni ko'rib chiqamiz.

Kichik axlat yig'ish

"Yosh avlod" makonidan chiqindi yig'ish "Kichik axlat yig'ish" deb nomlanadi. Ushbu turdagi qurish har doim JVM yangi ob'ekt uchun joy ajrata olmasa, ya'ni Eden Space to'la bo'lganda ishga tushadi. Shunday qilib, tanlov darajasi qanchalik yuqori bo'lsa, Kichik axlat yig'ish shunchalik tez-tez sodir bo'ladi.

Asosiy axlat yig'ish

Katta axlat yig'ish Tenured (eski joy) ni tozalaydi. Eski avlod kattaroq bo'lganligi sababli, yig'ilish Yosh avlodga qaraganda kamroq sodir bo'ladi. Eski avloddan ob'ektlar yo'qolganda, biz "katta axlat yig'ish" sodir bo'lgan deb aytamiz. Qadimgi avlod kollektori Yosh avloddan targ'ibot muvaffaqiyatsizlikka uchramaslik uchun qachon yig'ishni boshlash kerakligini taxmin qilishga harakat qiladi. Kollektorlar Eski avlodning to'ldirish chegarasini kuzatib boradi va bu chegaradan oshib ketganda yig'ishni boshlaydi. Agar ushbu chegara reklama talablariga javob berish uchun etarli bo'lmasa, "To'liq axlat yig'ish" ishga tushiriladi.

To'liq axlat yig'ish

To'liq axlat yig'ish butun to'plamni - ham yosh, ham eski joylarni tozalaydi. Ko'p odamlar Major (faqat OLD avlod) va To'liq GC (Yosh + OLD (Uyma)) o'rtasida chalkashib ketishadi. To'liq axlat yig'ish barcha tirik ob'ektlarni eski avlodni yig'ish va siqishdan keyin yoshdan keksa avlodgacha targ'ib qilishni o'z ichiga oladi. To'liq axlat yig'ish "Stop-the-World" uchun to'xtash joyi bo'ladi. Bu kollektor ishlayotgan vaqtda yangi ob'ektlar ajratilmasligini va ob'ektlarning mavjud bo'lmasligini ta'minlaydi.

Texnik intervyuda bahor haqida 15 ta muhim savol

Manba: Dev.to Spring Framework Java platformasi uchun universal ramka hisoblanadi. Uning asosiy xususiyatlaridan har qanday Java ilovasi foydalanishi mumkin va Java EE asosidagi veb-ilovalarni yaratish uchun kengaytmalar mavjud. Mana bahor kodlashiga oid intervyu savollari va javoblari ro'yxati. Umid qilamizki, ular sizga 2021 yilda texnik intervyuga tayyorgarlik ko'rishda yordam beradi.Kofe tanaffusi №61.  Java (JVM) da axlat yig'ish qanday ishlaydi.  Texnik intervyuda bahor haqida 15 ta muhim savol - 6

1. Bahor nima?

Javob: Spring Java dasturlarini ishlab chiqish uchun ochiq kodli asosdir. Spring Framework ning asosiy xususiyatlaridan har qanday Java ilovasini ishlab chiqish uchun foydalanish mumkin va kengaytmalar Java EE platformasi asosida veb-ilovalarni yaratish uchun ham mavjud. Bahor ramkasi J2EEni ishlab chiqishda foydalanishni osonlashtirish va POJO (Plain Old Java Object) asosidagi modelni o'z ichiga olgan holda dasturlash amaliyotini yaxshilashga qaratilgan.

2. Bahor ramkasida loviyaning standart doirasi nima?

Javob: Fasolning standart ko'lami Singleton (dizayn namunasi).

3. Bean simlari nima?

Javob: Fasol simlari - bu Spring konteyneridagi dastur komponentlari (loviya) o'rtasida assotsiatsiyalar yaratish harakati.

4. Spring Security nima?

Javob: Spring Security - bu Java ilovalariga autentifikatsiya va avtorizatsiya usullarini taqdim etishga qaratilgan Spring frameworkning alohida moduli. Shuningdek, u CSRF hujumlari kabi eng keng tarqalgan xavfsizlik zaifliklarini tuzatadi. Veb-ilovalarda Spring Security-dan foydalanish uchun siz oddiy izoh bilan boshlashingiz mumkin: @EnableWebSecurity.

5. Loviya ta'rifida nimalar mavjud?

Javob: Fasol ta'rifi konfiguratsiya metama'lumotlari deb ataladigan ma'lumotlarni o'z ichiga oladi va konteyner quyidagilarni bilishi kerak:
  • Fasolni qanday yaratish kerak;
  • Fasolning hayot aylanishi tafsilotlari;
  • fasolga bog'liqliklar.

6. Spring Boot nima?

Javob: Spring Boot - bu Spring ilovasini minimal kod bilan ishga tushirishingiz uchun qozon konfiguratsiyasini kamaytirish uchun oldindan tuzilgan ramkalar to'plamini taqdim etadigan loyiha.

7. DispatcherServlet nima va u nima uchun ishlatiladi?

Javob: DispatcherServlet - bu Spring MVC ilovasiga kiruvchi barcha veb-so'rovlarni ko'rib chiqadigan Front Controller dizayn namunasining amalga oshirilishi. Front Controller naqsh (Korxona ilovalari dizayni namunasi) veb-ilovalarda keng tarqalgan naqsh bo'lib, uning vazifasi butun so'rovni qabul qilish va uni amalda qayta ishlash uchun dasturning turli komponentlariga yo'naltirishdir. Bahorda MVC DispatcherServlet so'rovni bajarish uchun to'g'ri boshqaruvchini topish uchun ishlatiladi. Bu ishlov beruvchi xaritalash yordamida amalga oshiriladi: masalan, @RequestMapping izohi.

8. Spring-mvc.jar sinf yo'liga kerakmi yoki u spring-corening bir qismimi?

Javob: Spring-mvc.jar spring-core tarkibiga kiradi, ya'ni agar siz Java loyihangizda Spring MVC ramkasidan foydalanmoqchi bo'lsangiz, ilovangiz sinf yo'liga spring-mvc.jar qo'shishingiz kerak. Java veb-ilovasida spring-mvc.jar odatda /WEB-INF/lib jildiga joylashtiriladi.

9. Bahordan foydalanishning qanday afzalliklari bor?

Javob: Quyida Spring Framework-dan foydalanishning ba'zi afzalliklari ro'yxati keltirilgan:
  • Engil vazn - o'lcham va shaffoflik nuqtai nazaridan bahor nisbatan engildir. Spring Framework ning asosiy versiyasi taxminan 2 MB ni tashkil qiladi.
  • Boshqaruvning teskari o'zgarishi (IOC) - Bo'shashmasdan ulanishga bahorda nazorat qilish texnikasining inversiyasi yordamida erishiladi. Ob'ektlar bog'liq ob'ektlarni yaratish yoki qidirish o'rniga o'zlarining bog'liqliklarini ta'minlaydi.
  • Aspektga yo'naltirilgan - Spring aspektlarga yo'naltirilgan dasturlashni qo'llab-quvvatlaydi va tizim xizmatlaridan dastur biznes mantig'ini ajratish orqali izchil rivojlanishni ta'minlaydi.
  • Konteynerlar - Bahor konteyneri ob'ektlarni yaratadi, ularni bir-biriga bog'laydi, ularni sozlaydi va ularni yaratishdan to utilizatsiya qilishgacha boshqaradi.
  • MVC Framework - Bahor veb-ramka yaxshi mo'ljallangan MVC veb-ramka bo'lib, u Struts kabi veb-ramkalarga yoki boshqa haddan tashqari ishlab chiqilgan yoki kamroq mashhur veb-ramkalarga alternativa beradi.
  • Tranzaksiyalarni boshqarish - Spring mahalliy tranzaktsiyalarga (masalan, bitta ma'lumotlar bazasidan foydalanish) yoki global tranzaktsiyalarga (masalan, JTA yordamida) miqyoslashi mumkin bo'lgan izchil tranzaksiyalarni boshqarish interfeysiga ega.
  • Istisnolarni boshqarish - Spring texnologiyaga xos istisnolarni (JDBC, Hibernate yoki JDO tomonidan chiqarilganlar kabi) izchil, tekshirilmagan istisnolarga aylantirish uchun qulay API taqdim etadi.

10. Bahor fasollari nima?

Javob: Bahor fasollari Spring Container tomonidan boshqariladigan ob'ektlarning namunalari. Ular ramka tomonidan yaratilgan va ulangan va keyinchalik ularni olishingiz mumkin bo'lgan "ob'ekt sumkasi" (konteyner) ga joylashtiriladi. Simlarni ulash - bu qaramlik in'ektsiyasini tashkil etuvchi narsa. Bu shuni anglatadiki, siz shunchaki: "Menga bu narsa kerak" deb aytishingiz mumkin va ramka ushbu ob'ektni olish uchun ma'lum qoidalarga amal qiladi.

11. Core Container modulining maqsadi nima?

Javob: Yadro konteyneri Spring ramkasining asosiy funksionalligini ta'minlaydi. Asosiy idishning asosiy komponenti Fabrika naqshining amalga oshirilishi bo'lgan BeanFactory hisoblanadi. BeanFactory konfiguratsiya va dastur spetsifikatsiyasiga bog'liqlikni haqiqiy dastur kodidan ajratish uchun Inversiya boshqaruvidan foydalanadi.

12. Ilova konteksti nima?

Javob: Bir qarashda, dastur konteksti loviya zavodi bilan bir xil. Ikkala fasol ta'riflarini yuklaydi, loviyalarni bir-biriga bog'lab, so'rov bo'yicha tarqatadi. Ammo u ham quyidagilarni ta'minlaydi:
  • Matnli xabarlarni hal qilish uchun vosita, shu jumladan xalqarolashtirishni qo'llab-quvvatlash.
  • Fayl resurslarini yuklashning keng tarqalgan usuli.
  • Tinglovchi sifatida ro'yxatdan o'tgan fasol uchun tadbirlar.

13. Java Server Faces (JSF) ni Spring bilan qanday integratsiyalash mumkin?

Javob: JSF va Spring bir xil xususiyatlarni baham ko'radi, ayniqsa Inversion of Control xizmatlari sohasida. Faces-config.xml konfiguratsiya faylida JSF tomonidan boshqariladigan fasollarni e'lon qilish orqali siz FacesServlet ishga tushganda ushbu fasolni yaratishga ruxsat berasiz. JSF sahifalaringiz ushbu fasol va ularning barcha xususiyatlariga kirish huquqiga ega. JSF va Spring ikkita usulda birlashtirilishi mumkin: DelegatingVariableResolver : Spring JSF va Springni birgalikda ishlatish imkonini beruvchi JSF o'zgaruvchini hal qiluvchi bilan birga keladi. DelegatingVariableResolver avval qiymatlarni qidirishni JSF dasturining standart tarjimoniga, so'ngra Spring WebApplicationContextning "biznes konteksti" ga topshiradi. Bu JSF tomonidan boshqariladigan fasollarga bog'liqliklarni kiritishni osonlashtiradi. FacesContextUtils : Maxsus VariableResolver o'z xususiyatlarini faces-config.xml faylida loviya bilan taqqoslaganda yaxshi ishlaydi. Agar fasolni suratga olishingiz kerak bo'lsa, FacesContextUtils klassi buni osonlashtiradi. U WebApplicationContextUtils-ga o'xshaydi, bundan tashqari u ServletContext parametrini emas, balki FacesContext parametrini qabul qiladi.
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext (FacesContext.getCurrentInstance ());

14. Spring MVC ramkasi nima?

Javob: Spring Web MVC ramkasi moslashuvchan va erkin bog'langan veb-ilovalarni ishlab chiqish uchun ishlatilishi mumkin bo'lgan modelni ko'rish-kontroller arxitekturasini va oldindan tuzilgan komponentlarni taqdim etadi. MVC namunasi dasturning turli jihatlarini (kirish mantig'i, biznes mantig'i va UI mantig'i) ajratishga olib keladi va bu elementlar o'rtasida bo'sh ulanishga imkon beradi.

15. Bahorda hodisalarni boshqarish qanday ishlaydi?

Javob: ApplicationContextda ishlov berish ApplicationEvent sinfi va ApplicationListener interfeysi orqali amalga oshiriladi . Ya'ni, agar loviya ApplicationListener ni amalga oshirsa , har safar ApplicationContext dasturida ApplicationEvent nashr etilganda , bu fasol ro'yxatga olinadi. O'qiganingiz uchun tashakkur va texnik suhbatingizga omad tilaymiz!
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION