JavaRush /Java блогу /Random-KY /Кофе-брейк №60. Таштанды чогултуу Java (JVM) менен кантип...

Кофе-брейк №60. Таштанды чогултуу Java (JVM) менен кантип иштейт. Техникалык интервьюда Жаз тууралуу 15 маанилүү суроолор

Группада жарыяланган

Таштанды чогултуу Java'да (JVM) кантип иштейт

Булак: DZone

Javaдагы таштандыларды чогултуу процесси

Java таштанды чогултуу эстутумду автоматтык түрдө бөлүштүрөт жана бошотот, андыктан иштеп чыгуучулар эстутумду башкаруу үчүн өзүнчө программа жазуунун кажети жок, бул Java-да программалоонун негизги артыкчылыктарынын бири. Java программасы JVMде иштеген сайын, an objectтер үймөктө түзүлөт жана программага бөлүнгөн эстутумдун бир бөлүгүн билдирет. Убакыттын өтүшү менен кээ бир буюмдардын кереги жок болот. Таштанды жыйноочу бул пайдаланылбаган an objectтерди таап, эстутумду бошотуу үчүн аларды жок кылат. Кофе-брейк №61.  Таштанды чогултуу Java (JVM) менен кантип иштейт.  Техникалык интервьюда Жаз тууралуу 15 маанилүү суроо - 1Таштанды жыйноочу эс үймөгүн баалагандан кийин кайсы an objectтер колдонулуп, кайсынысы жок экенин аныктап, пайдаланылбаган an objectтерди алып салат. Колдонулган же шилтеме берилген an object программаңыздын кандайдыр бир бөлүгү дагы эле ошол an objectке көрсөткүчтү сактап турганын билдирет. Эгерде an object колдонулбай калса же шилтеме берилбесе, анда ал программанын эч бир бөлүгүнө шилтеме кылынбай калат. Ошентип, шилтеме кылынбаган an object тарабынан колдонулган эстутум таштандыларды чогултуу аркылуу бошотулушу мүмкүн. Кофе-брейк №61.  Таштанды чогултуу Java (JVM) менен кантип иштейт.  Техникалык интервьюда Жаз тууралуу 15 маанилүү суроо - 2Эстутумду бошотуу үч негизги процесс менен мүнөздөлөт:
  1. Белгилөө.
  2. Кадимки алып салуу.
  3. Компрессия менен алып салуу.
Белгилөө - бул таштанды жыйноочу тарабынан колдонулган жана колдонулбаган эстутум бөлүктөрүн аныктоо процесси. Белгилөө, адатта, биринчи кадам болуп саналат. Кадимки өчүрүү – шилтеме кылынбаган an objectтерди өчүрүү процесси, шилтеме берилген an objectтерди жана көрсөткүчтөрдү бош мейкиндикте калтыруу. Компакттык жок кылуу - Шилтеме берилбеген an objectтерди жок кылуудан тышкары, ал жаңы эстутумду бөлүштүрүүнү бир топ жеңилдетүү жана тезирээк кылуу үчүн an objectтерди чогуу жылдыруу менен, шилтеме кылынган an objectтерди ныктайт.

JVM үймөк эс тутуму

Кофе-брейк №61.  Таштанды чогултуу Java (JVM) менен кантип иштейт.  Техникалык интервьюда Жаз жөнүндө 15 маанилүү суроо - 3

Жаш муун

Жаңы түзүлгөн an objectтер Жаш муундан башталат. Бул жерде жаңы an objectилер жашай баштагандыктан аны питомник деп да коюшат. Жаш муун бардык жаңы an objectтер башталган Эден мейкиндигине жана бир таштанды чогултуу циклинде аман калгандан кийин an objectтер Эйденден көчүрүлгөн эки аман калган мейкиндикке бөлүнөт. Алар «Жаш муундун» таштанды жыйгычы тарабынан an objectилер чогултулганда кайра таштанды чогултууга себеп болот. Eden Space Бардык жаңы an objectтер биринчи жолу Эден мейкиндигинде түзүлөт. Майда таштанды чогултуу JVM тарабынан аныкталган босогого жеткенде күйөт. Көрсөтүлгөн an objectтер Эден мейкиндигинен биринчи сактоо мейкиндигине ('Эден' жана 'ден' -> 'to') жылдырылат. Шилтеме берилбеген an objectтер Eden Space тазаланганда алынып салынат. Survivor 0 (S0) жана Survivor 1 (S1) Экөө тең аман калган (Кимден жана чейин) талаалары бош башталат. Таштанды жыйноо кайра пайда болгондо, бардык шилтеме an objectтер калган мейкиндикке жылдырылат. Таштандыларды жыйноо аяктагандан кийин, аман калгандардын жерлери (аты-жөнү) "ден" жана "каякка" алмаштырылат. Эгерде мурунку таштанды чогултуу учурунда S1 "чейин" ролунда болсо, азыр S1 толуп, "ден" болуп калат. Демек, эгерде S0 бош болсо, анда ал "чейин" болуп калат.

Эски муун

Кичинекей таштандыларды чогулткандан кийин, эскирген an objectтер белгилүү бир жаштын босогосуна жеткенде (заманбап JVM үчүн демейки босого таштандыны чогултуунун 15 циклине коюлган), алар узак мөөнөттүү an objectтер менен бирге жаш муундан эскисине өтөт. Майда таштанды жыйноочулар пайда болгон сайын, an objectтер Эски муундун мейкиндигине жыла бергендиктен, ал толуп баштайт жана ири таштанды чогултуу башталат. Негизги таштанды чогултуу an objectтерди Эски муундагы таштанды жыйноочу тарабынан чогултулганда пайда болот. Кофе-брейк №61.  Таштанды чогултуу Java (JVM) менен кантип иштейт.  Техникалык интервьюда Жаз тууралуу 15 маанилүү суроо - 4

Туруктуу муун

Класстар жана методдор сыяктуу метаберorштер Туруктуу муунда сакталат. Андан ары колдонулбай калган класстарды таштанды жыйноочу алып салышы мүмкүн. Таштандыларды толук жыйноо учурунда бардык муундардын пайдаланылбаган an objectилери чогултулат.Кофе-брейк №61.  Таштанды чогултуу Java (JVM) менен кантип иштейт.  Техникалык маекте Жаз тууралуу 15 маанилүү суроо - 5

Таштандыларды чогултуунун түрлөрү

Үймөктүн ар кандай бөлүктөрүн тазалаган таштанды жыйнактары көбүнчө Кичи, Чоң жана Толук таштанды чогултуу деп аталат. Бирок Минор, Мажор жана Толук терминдери туура аныктамасы жок кеңири колдонулгандыктан, биз таштанды чогултуунун бардык бул түрлөрүнүн түшүндүрмөсүн карап чыгабыз.

Майда таштанды чогултуу

«Жаш муун» мейкиндигинен таштандыларды чогултуу «Кичинекей таштандыларды чогултуу» деп аталат. JVM жаңы an object үчүн орун бөлө албаганда, башкача айтканда, Eden Space толгондо, куруунун бул түрү ар дайым иштетилет. Ошентип, тандоо ылдамдыгы канчалык жогору болсо, Майда таштандыларды чогултуу ошончолук көп болот.

Негизги таштанды чогултуу

Негизги таштанды чогултуу Tenured (эски мейкиндик) тазалайт. Эски муун чоң болгондуктан, Жаш муунга караганда чогулуш азыраак болот. Эски муундагы an objectтер жок болгондо, биз "чоң таштанды чогултуу" болду деп айтабыз. Эски муундун коллекционери Жаш Муундан жылдыруудагы кемчorктерди болтурбоо үчүн чогултууну качан баштоо керек экенин алдын ала айтууга аракет кылат. Коллекционерлер Эски муундун толтуруу босогосун көзөмөлдөп, ал босого ашып кеткенде чогулта башташат. Бул босого жылдыруу талаптарын канааттандыруу үчүн жетишсиз болсо, "Толук таштанды чогултуу" ишке киргизилет.

Толук таштанды чогултуу

Толук таштанды чогултуу жаш жана кары мейкиндиктерди толугу менен тазалайт. Көптөгөн адамдар Major (OLD муун гана) жана Full GC (Young + OLD (Дөбө)) ортосунда чаташтырылган. Толук таштанды чогултуу эски муунду чогултуп, ныктагандан кийин жаш муундан кары муунга чейин бардык тирүү an objectтерди илгерилетүүнү камтыйт. Таштандыларды толугу менен чогултуу "Дүйнөнүн токтоо" кыймылынын аялдамасы болот. Ал коллектор иштеп турганда жаңы an objectилердин бөлүнбөшүн жана an objectтердин жеткorксиз болуп калбашын камсыздайт.

Техникалык интервьюда Жаз тууралуу 15 маанилүү суроолор

Булак: Dev.to Spring Framework Java платформасы үчүн универсалдуу негиз. Анын негизги функционалдуулугу ар кандай Java тиркемеси тарабынан колдонулушу мүмкүн жана Java EE негизиндеги веб тиркемелерди түзүү үчүн кеңейтүүлөр бар. Бул жерде жазгы codeдоо менен байланышкан интервью суроолорунун жана жоопторунун тизмеси. Алар сизге 2021-жылы техникалык интервьюга даярданууга жардам берет деп үмүттөнөбүз.Кофе-брейк №61.  Таштанды чогултуу Java (JVM) менен кантип иштейт.  Техникалык маекте Жаз тууралуу 15 маанилүү суроо - 6

1. Жаз деген эмне?

Жооп: Жаз бул Java тиркемелерин иштеп чыгуу үчүн ачык булак негизи. Spring Framework'дун негизги өзгөчөлүктөрү каалаган Java тиркемесин иштеп чыгуу үчүн колдонулушу мүмкүн жана кеңейтүүлөр Java EE платформасынын негизинде веб тиркемелерди түзүү үчүн да жеткorктүү. Жазгы алHow J2EEди иштеп чыгууда колдонууну жеңилдетүү жана POJO (Plain Old Java Object) негизделген моделин киргизүү менен программалоо практикасын жакшыртууга багытталган.

2. Жаз алкагындагы буурчактын демейки масштабы кандай?

Жооп: буурчактын демейки масштабы Singleton (дизайн үлгүсү).

3. Bean зымдары деген эмне?

Жооп: Төө буурчак өткөргүч бул жазгы контейнердеги тиркеме компоненттеринин (буурчак) ортосунда ассоциацияларды түзүү актысы.

4. Жазгы коопсуздук деген эмне?

Жооп: Spring Security бул Java тиркемелерин аутентификация жана авторизациялоо ыкмаларын камсыз кылууга багытталган Spring алHowтарынын өзүнчө модулу. Ал ошондой эле CSRF чабуулдары сыяктуу кеңири таралган коопсуздук кемчorктерин оңдойт. Веб тиркемелеринде Spring Security колдонуу үчүн, сиз жөнөкөй annotationдан баштасаңыз болот: @EnableWebSecurity.

5. Төө буурчактын аныктамасында эмне камтылган?

Жооп: Буурчак аныктамасы конфигурациянын метадайындары деп аталган маалыматты камтыйт, ал контейнер төмөнкүлөрдү бorши керек:
  • буурчакты кантип түзүү керек;
  • буурчактын жашоо циклинин чоо-жайы;
  • буурчак көз карандылыктары.

6. Жазгы Бут деген эмне?

Жооп: Spring Boot бул программанын конфигурациясын азайтуу үчүн алдын ала конфигурацияланган алHowтарды камсыз кылган долбоор, андыктан Spring тиркемесин минималдуу code менен иштете аласыз.

7. DispatcherServlet деген эмне жана ал эмне үчүн колдонулат?

Жооп: DispatcherServlet бул Spring MVC тиркемесинин бардык кирүүчү веб сурамдарын тейлеген Front Controller дизайн үлгүсүн ишке ашыруу. Front Controller үлгүсү (Enterprise Application Design Pattern) веб-тиркемелерде кеңири таралган үлгү болуп саналат, анын милдети суроо-талапты толугу менен кабыл алуу жана аны иш жүзүндө иштетүү үчүн колдонмонун ар кандай компоненттерине багыттоо болуп саналат. Жазында MVC DispatcherServlet суроо-талапты аткаруу үчүн туура контроллерди табуу үчүн колдонулат. Бул иштетүүчү картасын колдонуу менен жасалат: мисалы, @RequestMapping annotationсы.

8. Spring-mvc.jar класс жолунда керекпи же бул жазгы ядронун бир бөлүгүбү?

Жооп: Spring-mvc.jar spring-coreнин бир бөлүгү болуп саналат, демек, эгер сиз Java долбооруңузда Spring MVC алкагын колдонгуңуз келсе, анда Spring-mvc.jar файлын тиркемеңиздин класс жолуна кошушуңуз керек. Java веб тиркемесинде spring-mvc.jar адатта /WEB-INF/lib папкасына жайгаштырылат.

9. Жазды колдонуунун кандай пайдасы бар?

Жооп: Төмөндө Spring Framework колдонуунун кээ бир артыкчылыктарынын тизмеси келтирилген:
  • Жеңил салмак - бул өлчөмү жана ачык-айкындуулук келгенде жаз салыштырмалуу жеңил болуп саналат. Spring Framework'дун негизги versionсы болжол менен 2 МБ.
  • Контролдун инversionсы (IOC) - Бошоң туташуу жазында башкаруунун инversionлоо ыкмасын колдонуу менен ишке ашат. Объекттер көз каранды an objectтерди түзүү же издөөнүн ордуна алардын көз карандылыгын камсыз кылат.
  • Аспект-багытталган - Жаз аспектиге багытталган программалоону колдойт жана колдонмо бизнес логикасын тутумдук кызматтардан ажыратып, ырааттуу өнүгүүнү камсыз кылат.
  • Контейнерлер - Жазгы Контейнер an objectтерди түзөт, аларды бириктирет, конфигурациялайт жана аларды жаратуудан жок кылууга чейин башкарат.
  • MVC Framework - Жазгы веб алHow - бул жакшы иштелип чыккан MVC веб алHowтары, ал Struts же башка ашыкча иштелип чыккан же анча популярдуу эмес веб алHowтарга альтернатива берет.
  • Транзакцияларды башкаруу - Spring жергorктүү транзакцияларга (мисалы, бирдиктүү маалымат базасын колдонуу менен) же глобалдуу транзакцияларга (мисалы, JTAны колдонуу менен) масштабдашы мүмкүн болгон ырааттуу транзакцияларды башкаруу интерфейсине ээ.
  • Exception Handling - Spring технологияга тиешелүү өзгөчө учурларды (мисалы, JDBC, Hibernate же JDO тарабынан ыргытылгандар) ырааттуу, текшерилбеген өзгөчөлүктөргө айландыруу үчүн ыңгайлуу API менен камсыз кылат.

10. Жазгы буурчак деген эмне?

Жооп: Жазгы буурчак бул Spring Container тарабынан башкарылуучу an objectтердин мисалдары. Алар түзүлүп, алHow менен туташтырылган жана "an object баштыгына" (контейнерге) жайгаштырылат, ал жерден сиз аларды кийинчерээк ала аласыз. Зымдар көз карандылык инъекциясын түзөт. Бул сиз жөн гана: "Мага бул нерсе керек" деп айта аласыз жана ал an objectти алуу үчүн алHow белгилүү эрежелерди сактайт дегенди билдирет.

11. Негизги контейнер модулунун максаты эмне?

Жооп: Ядро контейнери Spring алкагындагы негизги функцияларды камсыз кылат. Негизги контейнердин негизги компоненти - Factory үлгүсүн ишке ашыруу, BeanFactory. BeanFactory конфигурацияны жана колдонмонун спецификациясын чыныгы колдонмо codeунан бөлүү үчүн Inversion башкарууну колдонот.

12. Колдонмо контексти деген эмне?

Жооп: Бир караганда, колдонуу контексти төө буурчак заводуна окшош. Экөө тең төө буурчактын аныктамаларын жүктөп, төө буурчактарды бириктирип, өтүнүч боюнча таратышат. Бирок ал ошондой эле камсыз кылат:
  • Тексттик билдирүүлөрдү чечүү үчүн курал, анын ичинде интернационалдаштырууну колдоо.
  • Файл ресурстарын жүктөөнүн жалпы жолу.
  • Угармандар катары катталган буурчак үчүн окуялар.

13. Java Server Faces (JSF) Spring менен кантип интеграциялоо керек?

Жооп: JSF жана Spring бир эле өзгөчөлүктөрдү бөлүшөт, айрыкча Inversion of Control кызматтарында. Faces-config.xml конфигурация файлында JSF башкарылган буурчактарды жарыялоо менен, FacesServlet ишке баштаганда ошол төө бурчакты түзүүгө уруксат бересиз. Сиздин JSF баракчаларыңыз бул буурчактарды жана алардын бардык касиеттерин пайдалана алат. JSF жана Жазды эки жол менен бириктирсе болот: DelegatingVariableResolver : Spring JSF жана Жазды чогуу колдонууга мүмкүндүк берген JSF өзгөрмө чечүүчүсү менен келет. DelegatingVariableResolver адегенде баалуулуктарды издөөнү негизги JSF ишке ашыруунун демейки котормочусуна, андан кийин Spring WebApplicationContext'тин "бизнес контекстине" өткөрүп берет. Бул көз карандылыкты JSF башкарган буурчак киргизүүнү жеңилдетет. FacesContextUtils : Ыңгайлаштырылган VariableResolver өзүнүн касиеттерин faces-config.xml файлында фасоль менен салыштырганда жакшы иштейт. Бирок эгер буурчакты тартуу керек болсо, FacesContextUtils классы муну жеңилдетет. Ал WebApplicationContextUtilsке окшош, бирок ал ServletContext параметринин ордуна FacesContext параметрин кабыл алат.
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext (FacesContext.getCurrentInstance ());

14. Spring MVC фреймворк деген эмне?

Жооп: Spring Web MVC негизи ийкемдүү жана эркин бириктирилген веб тиркемелерди иштеп чыгуу үчүн колдонула турган моделди көрүү-контроллер архитектурасын жана алдын ала түзүлгөн компоненттерди камсыз кылат. MVC үлгүсү тиркеменин ар кандай аспектилерин (киргизүү логикасы, бизнес логикасы жана UI логикасы) бөлүүгө алып келет, ошол эле учурда бул элементтердин ортосунда бош байланышты камсыз кылат.

15. Жазда окуяны башкаруу кандайча иштейт?

Жооп: ApplicationContext ичинде иштетүү ApplicationEvent классы жана ApplicationListener интерфейси аркылуу камсыз кылынат . Башкача айтканда, буурчак ApplicationListener ишке ашырса, анда ApplicationEvent ApplicationContextге жарыяланган сайын , ал буурчак катталат. Окуу үчүн рахмат жана техникалык маегиңизге ийгorк!
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION