JavaRush /Java блогы /Random-KK /Кофе-брейк №60. Java (JVM) тілінде қоқыс жинау қалай жұмы...

Кофе-брейк №60. Java (JVM) тілінде қоқыс жинау қалай жұмыс істейді. Техникалық сұхбатта көктем туралы 15 маңызды сұрақ

Топта жарияланған

Java (JVM) тілінде қоқыс жинау қалай жұмыс істейді

Дереккөз: DZone

Java тілінде қоқыс жинау процесі

Java қоқыс жинағы жадты автоматты түрде бөледі және босатады, сондықтан әзірлеушілер жадты басқару үшін бөлек бағдарлама жазудың қажеті жоқ, бұл Java тіліндегі бағдарламалаудың негізгі артықшылықтарының бірі. Java бағдарламасы JVM жүйесінде жұмыс істеген сайын, нысандар үймеде жасалады және бағдарламаға бөлінген жад бөлігін көрсетеді. Уақыт өте келе кейбір элементтер қажет болмайды. Қоқыс жинағыш осы пайдаланылмаған нысандарды тауып, жадты босату үшін оларды жояды. Кофе-брейк №61.  Java (JVM) тілінде қоқыс жинау қалай жұмыс істейді.  Техникалық сұхбатта көктем туралы 15 маңызды сұрақ - 1Қоқыс жинағыш жад үйіндісін бағалағаннан кейін қандай нысандардың қолданыста және қайсысы жоқ екенін анықтайды және пайдаланылмаған нысандарды жояды. Пайдаланылған немесе сілтеме жасалған нысан сіздің бағдарламаңыздың кейбір бөлігі әлі де сол нысанға көрсеткішті сақтайтынын білдіреді. Егер нысан бұдан былай пайдаланылмаса немесе оған сілтеме жасалмаса, оған бағдарламаның кез келген бөлігі енді сілтеме жасамайды. Осылайша, сілтемесіз нысан пайдаланатын жад қоқыс жинауды орындау арқылы босатылуы мүмкін. Кофе-брейк №61.  Java (JVM) тілінде қоқыс жинау қалай жұмыс істейді.  Техникалық сұхбатта көктем туралы 15 маңызды сұрақ - 2Жадты босатуды үш негізгі процесспен сипаттауға болады:
  1. Белгілеу.
  2. Қалыпты жою.
  3. Тығыздау арқылы алып тастау.
Белгілеу – қоқыс жинаушы пайдаланbyteын және пайдаланbyteын жад бөліктерін анықтау процесі. Таңбалау әдетте бірінші қадам болып табылады. Қалыпты жою – сілтеме жасалмайтын an objectілерді жою, сілтеме жасалған нысандар мен көрсеткіштерді бос кеңістікте қалдыру. Тығыздауды жою - Сілтемесіз нысандарды жоюмен қатар, ол қалған сілтеме жасалған нысандарды ықшамдайды, жаңа жадты бөлуді әлдеқайда жеңіл және жылдамырақ ету үшін нысандарды бірге жылжытады.

JVM үйме жады

Кофе-брейк №61.  Java (JVM) тілінде қоқыс жинау қалай жұмыс істейді.  Техникалық сұхбатта Көктем туралы 15 маңызды сұрақ - 3

Жас ұрпақ

Жаңадан жасалған нысандар Жас ұрпақтан басталады. Бұл жерде жаңа нысандар өмір сүре бастағандықтан, оны питомник деп те атайды. Жас ұрпақ барлық жаңа нысандар басталатын Eden кеңістігіне және бір қоқыс жинау циклінде аман қалғаннан кейін нысандар Едемнен шығарылатын екі аман қалған кеңістікке бөлінген. Олар нысандарды «Жас ұрпақ» қоқыс жинағышы жинаған кезде қайта қоқыс жинауды тудырады. Eden Space Барлық жаңа нысандар алдымен Eden Space ішінде жасалады. Кішігірім қоқыс жинау JVM анықтаған шекке жеткенде іске қосылады. Аталған нысандар Eden кеңістігінен бірінші сақтау кеңістігіне («Eden» және «from» -> «to») жылжытылады. Сілтемесіз нысандар Eden Space тазартылған кезде жойылады. Survivor 0 (S0) және Survivor 1 (S1) Аман қалған (Кімнен және дейін) өрістерінің екеуі де бос басталады. Қоқыс жинау қайтадан орын алғанда, барлық сілтеме жасалған нысандар қалған кеңістікке жылжытылады. Қоқыстарды шығару аяқталғаннан кейін тірі қалғандардың орындары (аты-жөндері) «қайдан» және «кейін» ауыстырылады. Алдыңғы қоқыс жинау кезінде S1 «кімге» рөлінде болса, қазір S1 толып, «қайдан» болады. Тиісінше, егер S0 бос болса, онда ол «to» болады.

Ескі ұрпақ

Кәмелетке толмаған қоқыстарды жинаудан кейін ескірген an objectілер белгілі бір жас шегіне жеткенде (әдепкі бойынша, қазіргі заманғы JVM табалдырығы қоқыс жинаудың 15 цикліне орнатылады), олар ұзақ өмір сүретін an objectілермен бірге жас ұрпақтан ескіге көшеді. Кішігірім қоқыс жинаушылар пайда болған сайын, нысандар Ескі ұрпақ кеңістігіне жылжуды жалғастыруда, ол толтыра бастайды және қоқыс ірі жинау орын алады. Негізгі қоқыс жинау нысандарды Ескі ұрпақ қоқыс жинағышы жинаған кезде орын алады. Кофе-брейк №61.  Java (JVM) тілінде қоқыс жинау қалай жұмыс істейді.  Техникалық сұхбатта көктем туралы 15 маңызды сұрақ - 4

Тұрақты ұрпақ

Сыныптар мен әдістер сияқты метадеректер Тұрақты ұрпақта сақталады. Енді пайдаланылмайтын сыныптарды одан қоқыс жинаушы алып тастай алады. Толық қоқыс жинау кезінде барлық ұрпақтардың пайдаланылмаған an objectілері жиналады.Кофе-брейк №61.  Java (JVM) тілінде қоқыс жинау қалай жұмыс істейді.  Техникалық сұхбатта көктем туралы 15 маңызды сұрақ - 5

Қоқыстарды жинау түрлері

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

Шағын қоқыс жинағы

«Жас ұрпақ» кеңістігіндегі қоқыс жинағы «Кіші қоқыс жинағы» деп аталады. Бұл құрастыру түрі JVM жаңа нысан үшін орын бөле алмаған кезде, яғни Eden Space толған кезде іске қосылады. Осылайша, таңдау жылдамдығы неғұрлым жоғары болса, Кіші қоқыс жинау жиі орын алады.

Негізгі қоқыс жинағы

Негізгі қоқыс жинағы Tenured (ескі кеңістік) тазартады. Ескі ұрпақ үлкенірек болғандықтан, жас ұрпаққа қарағанда жиналыс жиі кездеседі. Ескі ұрпақтан an objectілер жоғалып кеткенде, біз «үлкен қоқыс жинау» орын алды деп айтамыз. Ескі ұрпақ коллекционері Жас ұрпақтың жарнамалық сәтсіздіктерін болдырмау үшін жинауды қашан бастау керектігін болжауға тырысады. Коллекционерлер Ескі ұрпақтың толтыру шегін бақылайды және бұл шекті мәннен асқан кезде жинауды бастайды. Егер бұл шек жарнама талаптарын қанағаттандыру үшін жеткіліксіз болса, «Толық қоқыс жинау» іске қосылады.

Толық қоқыс жинағы

Толық қоқыс жинағы жас және ескі кеңістіктерді түгелдей тазартады. Көптеген адамдар Major (тек ескі ұрпақ) және толық GC (Жас + OLD (үйме)) арасында шатастырады. Толық қоқыс жинағы ескі ұрпақты жинап, нығыздағаннан кейін жастан кәрі ұрпаққа дейін барлық тірі нысандарды жылжытуды қамтиды. Толық қоқыс жинау «Әлемді тоқтату» аялдамасы болады. Ол коллектор жұмыс істеп тұрған кезде жаңа нысандардың бөлінбеуін және an objectілердің қол жетімсіз болмауын қамтамасыз етеді.

Техникалық сұхбатта көктем туралы 15 маңызды сұрақ

Дереккөз: Dev.to Spring Framework Java платформасына арналған әмбебап негіз болып табылады. Оның негізгі функционалдығын кез келген Java қолданбасы пайдалана алады және Java EE негізіндегі веб-қосымшаларды жасауға арналған кеңейтімдер бар. Мұнда көктемгі codeтауға қатысты сұхбат сұрақтары мен жауаптарының тізімі берілген. Олар сізге 2021 жылы техникалық сұхбатқа дайындалуға көмектеседі деп үміттенеміз.Кофе-брейк №61.  Java (JVM) тілінде қоқыс жинау қалай жұмыс істейді.  Техникалық сұхбатта көктем туралы 15 маңызды сұрақ - 6

1. Көктем деген не?

Жауап: Spring Java қолданбаларын әзірлеуге арналған ашық бастапқы негіз болып табылады. Spring Framework негізгі мүмкіндіктерін кез келген Java қолданбасын әзірлеу үшін пайдалануға болады, сонымен қатар Java EE платформасы негізінде веб-қосымшаларды жасау үшін кеңейтімдер бар. Spring Framework J2EE әзірлеуде пайдалануды жеңілдетуге және POJO (Plain Old Java Object) негізделген үлгісін қосу арқылы бағдарламалау тәжірибесін жақсартуға бағытталған.

2. Spring рамкасындағы бұршақтың әдепкі ауқымы қандай?

Жауап: Бұршақтың әдепкі ауқымы - Singleton (дизайн үлгісі).

3. Бұршақ сымдары дегеніміз не?

Жауап: Бұршақ сымдары көктемгі контейнердегі қолданбалы құрамдас бөліктер (бұршақ) арасында байланыстарды құру әрекеті болып табылады.

4. Spring Security дегеніміз не?

Жауап: Spring Security - бұл Java қолданбаларына аутентификация және авторизация әдістерін беруге бағытталған Spring құрылымының жеке модулі. Ол сонымен қатар CSRF шабуылдары сияқты ең көп таралған қауіпсіздік осалдықтарын түзетеді. Веб-қосымшаларда Spring Security пайдалану үшін қарапайым annotationдан бастауға болады: @EnableWebSecurity.

5. Бұршақ анықтамасында не бар?

Жауап: Бұршақ анықтамасы конфигурация метадеректері деп аталатын ақпаратты қамтиды, ол контейнер келесілерді білуі керек:
  • Бұршақты қалай жасауға болады;
  • Бұршақтардың өмірлік циклінің мәліметтері;
  • бұршақ тәуелділіктері.

6. Көктемгі етік дегеніміз не?

Жауап: Spring Boot - бұл 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 негізгі нұсқасы шамамен 2 МБ құрайды.
  • Басқаруды инversionлау (IOC) - Көктемде басқару әдісін инversionлау арқылы бос муфтаға қол жеткізіледі. Нысандар тәуелді нысандарды жасау немесе іздеудің орнына олардың тәуелділіктерін қамтамасыз етеді.
  • Аспектілі-бағдарланған - Spring аспектіге бағытталған бағдарламалауды қолдайды және қолданба бизнес логикасын жүйелік қызметтерден ажырату арқылы дәйекті дамуды қамтамасыз етеді.
  • Контейнерлер - көктемгі контейнер нысандарды жасайды, оларды біріктіреді, конфигурациялайды және оларды жасаудан жоюға дейін басқарады.
  • MVC Framework - Spring web-framework - бұл Struts немесе басқа тым жобаланған немесе аз танымал веб-фремворктар сияқты веб-жүйкелерге балама беретін жақсы жобаланған MVC веб-жақтамасы.
  • Транзакцияларды басқару - Spring жергілікті транзакцияларға (мысалы, жалғыз дерекқорды пайдалану) немесе жаһандық транзакцияларға (мысалы, JTA пайдалану) масштабтауға болатын транзакцияларды басқарудың дәйекті интерфейсіне ие.
  • Ерекше жағдайларды өңдеу - Spring технологияға қатысты ерекше жағдайларды (JDBC, Hibernate немесе JDO шығарғандар сияқты) дәйекті, тексерілмеген ерекшеліктерге түрлендіру үшін ыңғайлы API ұсынады.

10. Жаздық бұршақ дегеніміз не?

Жауап: Көктемгі бұршақтар көктемгі контейнер басқаратын нысандардың даналары болып табылады. Олар рамка арқылы жасалады және қосылады және кейінірек оларды алуға болатын «нысан дорбасына» (контейнерге) орналастырылады. Сымдар - бұл тәуелділік инъекциясын құрайтын нәрсе. Бұл жай ғана: «Маған бұл нәрсе керек» деп айтуға болатынын білдіреді және бұл нысанды алу үшін құрылым белгілі бір ережелерді сақтайды.

11. Core Container модулінің мақсаты қандай?

Жауап: Ядро контейнері Spring құрылымының негізгі функционалдығын қамтамасыз етеді. Негізгі контейнердің негізгі құрамдас бөлігі - BeanFactory, зауыт үлгісін іске асыру. BeanFactory конфигурация мен қолданба спецификациясының тәуелділіктерін нақты қолданба codeынан бөлу үшін Инversionны басқаруды пайдаланады.

12. Қолданба мәтінмәні дегеніміз не?

Жауап: Бір қарағанда, қолданба контексі бұршақ зауытымен бірдей. Бұршақ анықтамаларын екеуі де жүктейді, бұршақтарды біріктіреді және сұраныс бойынша таратады. Бірақ ол сондай-ақ қамтамасыз етеді:
  • Мәтіндік хабарламаларды шешуге арналған құрал, соның ішінде интернационализацияны қолдау.
  • Файлдық ресурстарды жүктеудің жалпы әдісі.
  • Тыңдаушылар ретінде тіркелген бұршақтарға арналған оқиғалар.

13. Java Server Faces (JSF) Spring бағдарламасымен қалай біріктіріледі?

Жауап: JSF және Spring бірдей мүмкіндіктерді бөліседі, әсіресе басқаруды инversionлау қызметтері саласында. Faces-config.xml конфигурация файлында JSF басқарылатын бұршақтарды жариялау арқылы FacesServlet іске қосу кезінде сол бұршақты құруға рұқсат етесіз. JSF беттеріңіз осы бұршақтарға және олардың барлық қасиеттеріне қол жеткізе алады. JSF және Spring екі жолмен біріктірілуі мүмкін: DelegatingVariableResolver : Spring JSF және Spring бірге пайдалануға мүмкіндік беретін JSF айнымалы шешушісімен бірге келеді. DelegatingVariableResolver алдымен мәндерді іздеуді негізгі JSF енгізуінің әдепкі аудармашысына, содан кейін Spring WebApplicationContext бағдарламасының "бизнес контекстіне" береді. Бұл тәуелділіктерді JSF басқаратын бұршақтарға енгізуді жеңілдетеді. FacesContextUtils : теңшелетін VariableResolver оның қасиеттерін faces-config.xml файлындағы бұршақтармен салыстырған кезде жақсы жұмыс істейді. Бірақ бұршақты түсіру қажет болса, FacesContextUtils сыныбы оны жеңілдетеді. Ол ServletContext параметрінен гөрі FacesContext параметрін қабылдайтынын қоспағанда, WebApplicationContextUtils бағдарламасына ұқсас.
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