JavaRush /Блоги Java /Random-TG /Кофе-брейк №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и истиноднашуда истифода мешавад, тавассути иҷрои ҷамъоварии партовҳо озод кардан мумкин аст. Кофе-брейк №61.  Чӣ тавр ҷамъоварии ахлот дар Java (JVM) кор мекунад.  15 саволи муҳим дар бораи баҳор дар мусоҳибаи техникӣ - 2Озодкунии хотираро бо се раванди асосӣ тавсиф кардан мумкин аст:
  1. Нишон додан.
  2. Бартарафсозии муқаррарӣ.
  3. Хориҷ бо фишурдакунӣ.
Нишондиҳӣ раванди муайян кардани қисмҳои хотира аст, ки аз ҷониби коллектори ахлот истифода мешаванд ва истифода намешаванд. Тамғагузорӣ одатан қадами аввал аст. Ҳазфи муқаррарӣ раванди нест кардани an objectҳое мебошад, ки истиноднашуда, дар фазои холӣ гузоштани an objectҳо ва нишондиҳандаҳои истинодшаванда мебошад. Несткунии фишурда - Илова ба нест кардани an objectҳои истиноднашуда, он an objectҳои боқимондаи истинодшударо фишурда, an objectҳоро якҷоя интиқол медиҳад, то тақсимоти хотираи навро хеле осонтар ва тезтар кунад.

Хотираи JVM Heap

Кофе-брейк №61.  Чӣ тавр ҷамъоварии ахлот дар Java (JVM) кор мекунад.  15 саволи муҳим дар бораи баҳор дар мусоҳибаи техникӣ - 3

Насли ҷавон

Объектҳои навтаъсис аз Насли ҷавон оғоз мешаванд. Онро ясли хам меноманд, зеро дар ин чо an objectхои нав ба истикомат шуруъ мекунанд. Насли ҷавон ба фазои Aden тақсим карда мешавад, ки дар он ҳама an objectҳои нав оғоз мешаванд ва ду Фазои наҷотёфта, ки дар он ҷо an objectҳо пас аз зинда мондан дар як давраи ҷамъоварии партовҳо аз Адан кӯчонида мешаванд. Онҳо ҳангоми ҷамъоварӣ кардани ашёҳо аз ҷониби ҷамъкунандаи партовҳои насли ҷавон боиси ҷамъшавии дубораи ахлот мешаванд. Eden Space Ҳамаи an objectҳои нав бори аввал дар Eden Space сохта шудаанд. Ҷамъоварии партовҳои ночиз вақте ки он ба ҳадди муайянкардаи JVM мерасад, оташ мегирад. Объектҳои зикршуда аз фазои Эден ба ҷои аввал интиқол дода мешаванд ('Адан' ва 'аз' -> 'ба'). Вақте ки Eden Space тоза карда мешавад, an objectҳои истиноднашуда хориҷ карда мешаванд. Наҷотёфта 0 (S0) ва Наҷотёфтаи 1 (S1) Ҳарду майдонҳои наҷотёфта (Аз ва ба) холӣ оғоз мешаванд. Вақте ки ҷамъоварии ахлот дубора рух медиҳад, ҳама an objectҳои истинодшуда ба фазои боқимонда интиқол дода мешаванд. Вақте ки ҷамъоварии ахлот ба охир мерасад, ҷойҳои (номҳои) наҷотёфтагон "аз" ва "ба" иваз карда мешаванд. Агар дар давраи ҷамъоварии партовҳои қаблӣ S1 дар нақши “ба” бошад, ҳоло S1 пур шуда, “аз” мешавад. Мувофиқи он, агар S0 холӣ бошад, он гоҳ "ба" мешавад.

Насли кӯҳна

Пас аз ҷамъоварии хурди партовҳо, вақте ки an objectҳои кӯҳна ба ҳадди синну соли муайян мерасанд (ҳадди пешфарз барои JVM-ҳои муосир ба 15 давраи ҷамъоварии ахлот муқаррар карда шудааст), онҳо дар баробари an objectҳои дарозмуддат аз насли ҷавон ба кӯҳна мегузаранд. Вақте ки ҷамъоварии ахлотҳои хурд идома медиҳанд, an objectҳо ба фазои Насли кӯҳна ҳаракат мекунанд, он пур мешавад ва ҷамъоварии ахлотҳои асосӣ ба амал меояд. Ҷамъоварии асосии ахлот вақте ба амал меояд, ки an objectҳо аз ҷониби коллектори партовҳои насли кӯҳна ҷамъоварӣ карда мешаванд. Кофе-брейк №61.  Чӣ тавр ҷамъоварии ахлот дар Java (JVM) кор мекунад.  15 саволи муҳим дар бораи баҳор дар мусоҳибаи техникӣ - 4

Насли доимӣ

Метамаълумот ба монанди синфҳо ва усулҳо дар Насли доимӣ нигоҳ дошта мешаванд. Синфҳое, ки дигар истифода намешаванд, метавонанд аз он партовгоҳ хориҷ карда шаванд. Ҳангоми ҷамъоварии пурраи партов, ашёҳои истифоданашуда аз тамоми наслҳо ҷамъ карда мешаванд.Кофе-брейк №61.  Чӣ тавр ҷамъоварии ахлот дар Java (JVM) кор мекунад.  15 саволи муҳим дар бораи баҳор дар мусоҳибаи техникӣ - 5

Намудҳои ҷамъоварии партовҳо

Ҷамъоварии партовҳое, ки қисмҳои гуногуни дохor теппаро тоза мекунанд, аксар вақт коллексияҳои ахлотҳои хурд, калон ва пурра номида мешаванд. Аммо азбаски истилоҳҳои Минор, Майор ва Пурра бе таърифи дуруст ба таври васеъ истифода мешаванд, мо шарҳи ҳамаи ин навъҳои ҷамъоварии ахлотро баррасӣ хоҳем кард.

Ҷамъоварии партовҳои хурд

Ҷамъоварии партовҳо аз фазои "Насли ҷавон" Ҷамъоварии партовҳои хурд номида мешавад. Ин намуди сохтмон ҳамеша ҳангоми пур кардани Eden Space, JVM барои an objectи нав ҷой ҷудо карда наметавонад, оғоз мешавад. Ҳамин тариқ, суръати интихоб баландтар бошад, ҷамъоварии партовҳои хурд ҳамон қадар бештар рух медиҳад.

Ҷамъоварии асосии партовҳо

Ҷамъоварии асосии партовҳо Tenured (фазои кӯҳна) -ро тоза мекунад. Азбаски насли кӯҳна калонтар аст, ҷамъомад нисбат ба Насли ҷавон камтар рух медиҳад. Вақте ки an objectҳо аз Насли кӯҳна нопадид мешаванд, мо мегӯем, ки "ҷамъоварии асосии партовҳо" ба амал омадааст. Коллектори Насли Кӯҳна кӯшиш мекунад, ки пешгӯӣ кунад, ки кай бояд ба ҷамъоварӣ шурӯъ кунад, то аз нокомиҳои таблиғ аз Насли ҷавон пешгирӣ кунад. Коллекторҳо ҳадди ниҳоии насли кӯҳнаро назорат мекунанд ва вақте ки ин ҳадди аксар аз ҳад зиёд аст, ба ҷамъоварӣ шурӯъ мекунанд. Агар ин ҳадди барои қонеъ кардани талаботи таблиғот кофӣ набошад, "Ҷамъоварии пурраи партовҳо" оғоз карда мешавад.

Ҷамъоварии пурраи партовҳо

Ҷамъоварии пурраи партовҳо тамоми дастаро тоза мекунад - ҳам ҷойҳои ҷавон ва ҳам кӯҳна. Бисёр одамон байни Major (танҳо насли кӯҳна) ва Full GC (Ҷавон + OLD (Heap)) ошуфта шудаанд. Ҷамъоварии пурраи партовҳо таблиғи ҳама ашёҳои зиндаро аз ҷавонон то насли калонсол пас аз ҷамъоварӣ ва фишурдани насли кӯҳна дар бар мегирад. Ҷамъоварии пурраи партовҳо таваққуфгоҳи Stop-the-World хоҳад буд. Он кафолат медиҳад, ки an objectҳои нав ҷудо карда намешаванд ва an objectҳо ҳангоми кор кардани коллектор дастнорас нашаванд.

15 саволи муҳим дар бораи баҳор дар мусоҳибаи техникӣ

Сарчашма: Dev.to Spring Framework як чаҳорчӯбаи универсалӣ барои платформаи Java мебошад. Функсияҳои асосии онро ҳама гуна замимаи Java истифода бурдан мумкин аст ва барои эҷоди барномаҳои веб дар асоси Java EE васеъшавӣ мавҷуданд. Ин аст рӯйхати саволҳои мусоҳиба ва ҷавобҳои марбут ба рамзгузории баҳор. Умедворем, ки онҳо ба шумо дар омодагӣ ба мусоҳибаи техникии худ дар соли 2021 кӯмак мекунанд.Кофе-брейк №61.  Чӣ тавр ҷамъоварии ахлот дар Java (JVM) кор мекунад.  15 саволи муҳим дар бораи баҳор дар мусоҳибаи техникӣ - 6

1. Баҳор чист?

Ҷавоб: Баҳор чаҳорчӯбаи кушодаасос барои таҳияи барномаҳои Java мебошад. Хусусиятҳои асосии чаҳорчӯбаи Spring Framework метавонанд барои таҳияи ҳама гуна замимаҳои Java истифода шаванд ва васеъшавӣ инчунин барои сохтани барномаҳои веб дар асоси платформаи Java EE дастрасанд. Ҳадафи чаҳорчӯбаи баҳор барои осон кардани истифодаи J2EE дар таҳия ва такмил додани таҷрибаҳои барномасозӣ тавассути ворид кардани модели POJO (Plain Old Java Object) мебошад.

2. Миқёси пешфарзии лӯбиё дар чаҳорчӯбаи баҳор чист?

Ҷавоб: Миқёси пешфарзии лӯбиё Singleton (намуди тарроҳӣ) мебошад.

3. Ноқилҳои Bean чист?

Ҷавоб: Ноқилҳои лӯбиё ин амали эҷоди ассотсиатсияҳо байни ҷузъҳои барнома (лубиё) дар контейнери баҳорӣ мебошад.

4. Амнияти баҳор чист?

Ҷавоб: Баҳор Амният як модули алоҳидаи чаҳорчӯбаи Spring мебошад, ки ба таъмини усулҳои аутентификатсия ва авторизатсия ба барномаҳои Java нигаронида шудааст. Он инчунин осебпазирии маъмултарини амниятиро, ба монанди ҳамлаҳои CSRF, ислоҳ мекунад. Барои истифодаи Spring Security дар барномаҳои веб, шумо метавонед бо шарҳи оддӣ оғоз кунед: @EnableWebSecurity.

5. Дар таърифи лӯбиё чиро дар бар мегирад?

Ҷавоб: Таърифи лӯбиё дорои маълумотест, ки метамаълумоти конфигуратсия номида мешавад, ки контейнер бояд чизҳои зеринро донад:
  • Чӣ тавр сохтани лӯбиё;
  • Тафсилоти давраи зиндагии лӯбиё;
  • вобастагии лӯбиё.

6. Пойгоҳи баҳорӣ чист?

Ҷавоб: Spring Boot лоиҳаест, ки маҷмӯи қаблан танзимшудаи чаҳорчӯбаҳоро барои кам кардани конфигуратсияи дегхона таъмин мекунад, то шумо метавонед як барномаи Springро бо рамзи ҳадди ақал ба кор дароред.

7. DispatcherServlet чист ва он барои чи истифода мешавад?

Ҷавоб: DispatcherServlet татбиқи намунаи тарҳрезии Front Controller мебошад, ки ҳама дархостҳои веби воридотӣ ба замимаи Spring MVC-ро иҷро мекунад. Намунаи Front Controller (Tablen Design Application Enterprise Pattern) як намунаи маъмул дар барномаҳои веб мебошад, ки вазифаи онҳо гирифтани тамоми дархост ва интиқоли он ба ҷузъҳои гуногуни барнома барои коркарди воқеӣ мебошад. Дар фасли баҳор MVC DispatcherServlet барои ёфтани контролери дуруст барои коркарди дархост истифода мешавад. Ин бо истифода аз харитасозии коркардкунанда анҷом дода мешавад: масалан, шарҳи @RequestMapping.

8. Оё spring-mvc.jar дар синфхона лозим аст ё он як қисми Spring-core аст?

Ҷавоб: Spring-mvc.jar як қисми spring-core мебошад, ки маънои онро дорад, ки агар шумо хоҳед, ки чаҳорчӯбаи Spring MVC-ро дар лоиҳаи Java-и худ истифода баред, пас шумо бояд spring-mvc.jar-ро дар синфи замимаи худ дохил кунед. Дар веб-барномаи Java, spring-mvc.jar одатан дар папкаи /WEB-INF/lib ҷойгир карда мешавад.

9. Истифодаи баҳор чӣ фоида дорад?

Ҷавоб: Дар зер рӯйхати баъзе бартариҳои истифодаи Spring Framework оварда шудааст:
  • Вазни сабук - Вақте ки сухан дар бораи андоза ва шаффофият меравад, баҳор нисбатан сабук аст. Варианти асосии Spring Framework тақрибан 2 МБ аст.
  • Инversionи назорат (IOC) - Пайвастшавии фуҷур дар фасли баҳор бо истифода аз инversionи техникаи назорат ба даст оварда мешавад. Объектҳо ба ҷои эҷод ё ҷустуҷӯи an objectҳои вобаста вобастагии худро таъмин мекунанд.
  • Ба ҷанба нигаронидашуда - Баҳор барномасозии ба ҷанба нигаронидашударо дастгирӣ мекунад ва рушди пайвастаро тавассути ҷудо кардани мантиқи тиҷорати барнома аз хидматҳои система таъмин мекунад.
  • Контейнерҳо - Контейнери баҳорӣ an objectҳоро эҷод мекунад, онҳоро ба ҳам мепайвандад, танзим мекунад ва онҳоро аз офариниш то ихтиёрдорӣ идора мекунад.
  • MVC Framework - Чаҳорчӯбаи веби баҳор чаҳорчӯбаи веби хуб тарҳрезишудаи MVC мебошад, ки алтернатива ба чаҳорчӯбаҳои веб ба монанди Struts ё дигар чаҳорчӯбаҳои веби аз ҳад зиёд тарҳрезишуда ё камтар маъмулро фароҳам меорад.
  • Идоракунии транзаксия - Spring дорои интерфейси пайвастаи идоракунии транзаксия мебошад, ки метавонад ба транзаксияҳои маҳаллӣ (масалан, бо истифода аз як пойгоҳи додаҳо) ё транзаксияҳои глобалӣ (масалан, бо истифода аз JTA) васеъ карда шавад.
  • Муносибати истисно - Spring API-и қулайро барои табдил додани истисноҳои мушаххаси технология (ба монанди онҳое, ки аз ҷониби JDBC, Hibernate ё JDO партофта шудаанд) ба истисноҳои пайваста ва санҷиданашуда таъмин мекунад.

10. Лӯбиёи баҳорӣ чист?

Ҷавоб: Лӯбиёи баҳорӣ намунаҳои an objectҳое мебошанд, ки аз ҷониби Spring Container идора карда мешаванд. Онҳо тавассути чаҳорчӯба сохта ва пайваст карда мешаванд ва дар "халтаи ашё" (контейнер) ҷойгир карда мешаванд, ки шумо баъдтар онҳоро аз он ҷо гирифта метавонед. Ноқил он чизест, ки тазриқи вобастагӣ дорад. Ин маънои онро дорад, ки шумо метавонед танҳо бигӯед: "Ба ман ин чиз лозим аст" ва чаҳорчӯба барои гирифтани ин an object қоидаҳои муайянро риоя мекунад.

11. Мақсади модули контейнери асосӣ чист?

Ҷавоб: Контейнери ядро ​​​​функсияҳои асосии чаҳорчӯбаи Springро таъмин мекунад. Ҷузъи асосии контейнери асосӣ BeanFactory, татбиқи намунаи Фабрика мебошад. BeanFactory барои ҷудо кардани вобастагии конфигуратсия ва мушаххасоти барнома аз рамзи воқеии барнома назорати инверсиониро истифода мебарад.

12. Контексти барнома чист?

Чавоб: Дар назари аввал, контексти мурочиат бо заводи лубиё якхела аст. Ҳарду таърифҳои лӯбиёро бор мекунанд, лӯбиёҳоро ба ҳам мепайванданд ва мувофиқи дархост тақсим мекунанд. Аммо он инчунин таъмин менамояд:
  • Восита барои ҳалли паёмҳои матнӣ, аз ҷумла дастгирии байналмиллалӣ.
  • Роҳи маъмули боркунии захираҳои файл.
  • Чорабиниҳо барои лӯбиё, ки ҳамчун шунавандагон ба қайд гирифта шудаанд.

13. Чӣ тавр Java Server Faces (JSF) -ро бо Spring ҳамгиро кардан мумкин аст?

Ҷавоб: JSF ва Spring баъзе аз хусусиятҳои якхеларо мубодила мекунанд, махсусан дар соҳаи хидматҳои Инверсионии назорат. Бо эълон кардани лӯбиёи JSF идорашаванда дар файли конфигуратсияи faces-config.xml, шумо ба FacesServlet иҷозат медиҳед, ки ин лӯбиёро ҳангоми оғозёбӣ эҷод кунад. Саҳифаҳои JSF-и шумо ба ин лӯбиёҳо ва тамоми хосиятҳои онҳо дастрасӣ доранд. JSF ва Spring-ро бо ду роҳ муттаҳид кардан мумкин аст: DelegatingVariableResolver : Spring бо ҳалкунандаи тағирёбандаи JSF меояд, ки ба шумо имкон медиҳад JSF ва Springро якҷоя истифода баред. DelegatingVariableResolver аввал ҷустуҷӯи арзишҳоро ба тарҷумони пешфарзии татбиқи аслии JSF ва сипас ба "контексти тиҷорӣ" -и Spring WebApplicationContext вогузор мекунад. Ин ворид кардани вобастагиҳоро ба лӯбиёи аз ҷониби JSF идорашаванда осон мекунад. FacesContextUtils : VariableResolver фармоишӣ ҳангоми харитасозии хосиятҳои он ба лӯбиё дар faces-config.xml хуб кор мекунад. Аммо агар ба шумо лозим аст, ки лӯбиё гиред, синфи FacesContextUtils онро осон мекунад. Он ба WebApplicationContextUtils монанд аст, магар он ки он параметри FacesContext-ро қабул мекунад, на параметри ServletContext.
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext (FacesContext.getCurrentInstance ());

14. Чаҳорчӯбаи Spring MVC чист?

Ҷавоб: Чаҳорчӯбаи Spring Web MVC як меъмории модел-намоиш-назораткунанда ва ҷузъҳои қаблан сохташударо таъмин мекунад, ки онҳоро барои таҳияи веб-барномаҳои фасеҳ ва ба ҳам пайвастшуда истифода бурдан мумкин аст. Намунаи MVC боиси ҷудо шудани ҷанбаҳои гуногуни барнома (мантиқи вуруд, мантиқи тиҷорат ва мантиқи UI) мегардад ва дар ҳоле ки имкон медиҳад, ки пайвастагии фуҷур байни ин унсурҳо имконпазир бошад.

15. Коркарди рӯйдодҳо дар фасли баҳор чӣ гуна кор мекунад?

Ҷавоб: Коркард дар ApplicationContext тавассути синфи ApplicationEvent ва интерфейси ApplicationListener таъмин карда мешавад . Яъне, агар лӯбиё ApplicationListener -ро амалӣ кунад , пас ҳар боре, ки ApplicationEvent дар ApplicationContext нашр мешавад , он лӯбиё ба қайд гирифта мешавад. Ташаккур барои хондан ва барори мусоҳибаи техникии шумо!
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION