JavaRush /Java Blog /Random-TL /Coffee break #60. Paano gumagana ang pangongolekta ng bas...

Coffee break #60. Paano gumagana ang pangongolekta ng basura sa Java (JVM). 15 mahahalagang tanong tungkol sa Spring sa isang teknikal na panayam

Nai-publish sa grupo

Paano gumagana ang pangongolekta ng basura sa Java (JVM)

Pinagmulan: DZone

Proseso ng pangongolekta ng basura sa Java

Ang pangongolekta ng basura ng Java ay awtomatikong naglalaan at nagpapalaya ng memorya, kaya ang mga developer ay hindi na kailangang magsulat ng isang hiwalay na programa upang pamahalaan ang memorya, na isa sa mga pangunahing benepisyo ng programming sa Java. Sa tuwing tumatakbo ang isang Java program sa JVM, ang mga bagay ay nilikha sa heap at kumakatawan sa isang bahagi ng memorya na inilalaan sa programa. Sa paglipas ng panahon, hindi na kakailanganin ang ilang mga item. Hinahanap ng tagakolekta ng basura ang mga hindi nagamit na bagay na ito at inaalis ang mga ito upang palayain ang memorya. Coffee break #61.  Paano gumagana ang pangongolekta ng basura sa Java (JVM).  15 mahahalagang tanong tungkol sa Spring sa isang teknikal na panayam - 1Ang kolektor ng basura, pagkatapos suriin ang memory heap, ay tutukuyin kung aling mga bagay ang ginagamit at alin ang hindi, at aalisin ang mga hindi nagamit na bagay. Ang isang ginamit o na-refer na bagay ay nangangahulugan na ang ilang bahagi ng iyong programa ay nagpapanatili pa rin ng isang pointer sa bagay na iyon. Kung ang isang bagay ay hindi na ginagamit o hindi na isinangguni, hindi na ito maisasangguni ng anumang bahagi ng programa. Kaya, ang memorya na ginagamit ng isang bagay na walang sanggunian ay maaaring mapalaya sa pamamagitan ng pagsasagawa ng pangongolekta ng basura. Coffee break #61.  Paano gumagana ang pangongolekta ng basura sa Java (JVM).  15 mahahalagang tanong tungkol sa Spring sa isang teknikal na panayam - 2Ang pagpapalaya ng memorya ay maaaring ilarawan ng tatlong pangunahing proseso:
  1. Pagmamarka.
  2. Normal na pagtanggal.
  3. Pag-alis na may compaction.
Ang pagmamarka ay ang proseso ng pagtukoy ng mga bahagi ng memorya na ginagamit at hindi ginagamit ng basurero. Ang pag-label ay karaniwang ang unang hakbang. Ang normal na pagtanggal ay ang proseso ng pagtanggal ng mga bagay na hindi na-refer, na nag-iiwan ng mga na-refer na bagay at mga pointer sa libreng espasyo. Compaction delete - Bilang karagdagan sa pagtanggal ng mga hindi na-reference na bagay, pinapadikit nito ang natitirang mga na-refer na bagay, pinagsasama-sama ang mga bagay upang gawing mas madali at mas mabilis ang paglalaan ng bagong memorya.

JVM Heap Memory

Coffee break #61.  Paano gumagana ang pangongolekta ng basura sa Java (JVM).  15 mahahalagang tanong tungkol sa Spring sa isang teknikal na panayam - 3

Young Generation

Ang mga bagong likhang bagay ay nagsisimula sa Young Generation. Tinatawag din itong nursery dahil nagsisimulang tumira ang mga bagong bagay dito. Ang Young Generation ay nahahati sa Eden Space, kung saan magsisimula ang lahat ng bagong bagay, at dalawang Survivor Spaces, kung saan inilalabas ang mga bagay sa Eden pagkatapos mabuhay sa iisang cycle ng koleksyon ng basura. Nagdudulot sila ng muling pagkolekta ng basura kapag ang mga bagay ay kinokolekta ng Young Generation garbage collector. Eden Space Lahat ng bagong bagay ay unang ginawa sa Eden Space. Ang menor de edad na pangongolekta ng basura ay papaputok kapag umabot na ito sa threshold na tinukoy ng JVM. Ang mga nabanggit na bagay ay inilipat mula sa Eden Space patungo sa unang save space ('Eden' at 'mula' -> 'to'). Inaalis ang mga hindi na-reference na bagay kapag na-clear ang Eden Space. Survivor 0 (S0) at Survivor 1 (S1) Parehong blangko ang mga field ng survivor (Mula at hanggang). Kapag naganap muli ang pangongolekta ng basura, lahat ng na-refer na bagay ay ililipat sa natitirang espasyo. Kapag natapos na ang pangongolekta ng basura, ang mga lugar (pangalan) ng survivor "mula sa" at "sa" ay pinagpalit. Kung noong nakaraang pangongolekta ng basura ang S1 ay nasa papel na "to", ngayon ay puno na ang S1 at nagiging "mula". Alinsunod dito, kung walang laman ang S0, ito ay magiging "to".

Lumang Henerasyon

Pagkatapos ng menor de edad na pangongolekta ng basura, kapag ang mga hindi na ginagamit na bagay ay umabot sa isang partikular na threshold ng edad (ang default na threshold para sa mga modernong JVM ay nakatakda sa 15 na cycle ng koleksyon ng basura), sila, kasama ng mga bagay na matagal nang nabubuhay, ay lumipat mula sa kabataan patungo sa luma. Habang patuloy na lumilitaw ang mga menor de edad na basurero, patuloy na lumilipat ang mga bagay sa espasyo ng Lumang Henerasyon, magsisimula itong mapuno at magaganap ang malalaking koleksyon ng basura. Ang pangunahing koleksyon ng basura ay nangyayari kapag ang mga bagay ay kinokolekta ng Old Generation garbage collector. Coffee break #61.  Paano gumagana ang pangongolekta ng basura sa Java (JVM).  15 mahahalagang tanong tungkol sa Spring sa isang teknikal na panayam - 4

Permanenteng Henerasyon

Ang metadata tulad ng mga klase at pamamaraan ay iniimbak sa Permanenteng Pagbuo. Ang mga klase na hindi na ginagamit ay maaaring tanggalin dito ng basurero. Sa buong koleksyon ng basura, kinokolekta ang mga hindi nagamit na bagay mula sa lahat ng henerasyon.Coffee break #61.  Paano gumagana ang pangongolekta ng basura sa Java (JVM).  15 mahahalagang tanong tungkol sa Spring sa isang teknikal na panayam - 5

Mga Uri ng Pagkolekta ng Basura

Ang mga koleksyon ng basura na naglilinis ng iba't ibang bahagi sa loob ng tambak ay kadalasang tinatawag na Minor, Major, at Full garbage collections. Ngunit dahil ang mga terminong Minor, Major at Full ay malawakang ginagamit nang walang tamang kahulugan, titingnan natin ang paliwanag ng lahat ng ganitong uri ng pangongolekta ng basura.

Maliit na Koleksyon ng Basura

Ang koleksyon ng basura mula sa Young Generation space ay tinatawag na Minor Garbage Collection. Ang ganitong uri ng build ay palaging na-trigger kapag ang JVM ay hindi maaaring maglaan ng espasyo para sa isang bagong bagay, iyon ay, kapag ang Eden Space ay puno na. Kaya, kung mas mataas ang rate ng pagpili, mas madalas na nangyayari ang Minor Garbage Collection.

Pangunahing Koleksyon ng Basura

Nililinis ng Major Garbage Collection ang Naka-tenured (lumang espasyo). Dahil ang Lumang Henerasyon ay mas malaki, ang pagpupulong ay nangyayari nang mas madalas kaysa sa Young Generation. Kapag nawala ang mga bagay mula sa Lumang Henerasyon, sinasabi namin na isang "pangunahing koleksyon ng basura" ang naganap. Susubukan ng kolektor ng Lumang Henerasyon na hulaan kung kailan niya kailangang magsimulang mangolekta upang maiwasan ang mga pagkabigo sa promosyon mula sa Young Generation. Sinusubaybayan ng mga kolektor ang threshold ng pagpuno ng Lumang Henerasyon at nagsimulang mangolekta kapag nalampasan na ang threshold na iyon. Kung hindi sapat ang threshold na ito upang matugunan ang mga kinakailangan sa promosyon, ilulunsad ang "Buong Koleksyon ng Basura."

Buong Koleksyon ng Basura

Nililinis ng Full Garbage Collection ang buong bungkos—parehong bata at lumang mga espasyo. Maraming tao ang nalilito sa pagitan ng Major (OLD generation lang) at Full GC (Young + OLD (Heap)). Kasama sa Buong Koleksyon ng Basura ang pag-promote ng lahat ng nabubuhay na bagay mula sa kabataan hanggang sa lumang henerasyon pagkatapos na tipunin at i-compact ang lumang henerasyon. Ang isang kumpletong koleksyon ng basura ay isang hinto para sa Stop-the-World. Tinitiyak nito na ang mga bagong bagay ay hindi inilalaan at ang mga bagay ay hindi magiging hindi magagamit habang tumatakbo ang kolektor.

15 mahahalagang tanong tungkol sa Spring sa isang teknikal na panayam

Source: Dev.to Spring Framework ay isang unibersal na balangkas para sa Java platform. Ang pangunahing functionality nito ay maaaring gamitin ng anumang Java application, at may mga extension para sa paglikha ng Java EE-based na web application. Narito ang isang listahan ng mga tanong at sagot sa panayam na may kaugnayan sa Spring coding. Umaasa kaming tulungan ka nilang maghanda para sa iyong teknikal na panayam sa 2021.Coffee break #61.  Paano gumagana ang pangongolekta ng basura sa Java (JVM).  15 mahahalagang tanong tungkol sa Spring sa isang teknikal na panayam - 6

1. Ano ang Spring?

Sagot: Ang Spring ay isang open source na framework para sa pagbuo ng mga Java application. Ang mga pangunahing tampok ng Spring Framework ay maaaring gamitin upang bumuo ng anumang Java application, at ang mga extension ay magagamit din upang lumikha ng mga web application batay sa Java EE platform. Ang balangkas ng Spring ay naglalayong gawing mas madaling gamitin ang J2EE sa pagbuo at pagbutihin ang mga kasanayan sa programming sa pamamagitan ng pagsasama ng isang POJO (Plain Old Java Object) na nakabatay sa modelo.

2. Ano ang default na saklaw ng isang bean sa Spring framework?

Sagot: Ang default na saklaw ng isang bean ay Singleton (design pattern).

3. Ano ang Bean wiring?

Sagot: Ang bean wiring ay ang pagkilos ng paglikha ng mga asosasyon sa pagitan ng mga bahagi ng aplikasyon (beans) sa isang lalagyan ng Spring.

4. Ano ang Spring Security?

Sagot: Ang Spring Security ay isang hiwalay na module ng Spring framework na nakatutok sa pagbibigay ng mga paraan ng pagpapatunay at awtorisasyon sa mga Java application. Inaayos din nito ang pinakakaraniwang mga kahinaan sa seguridad gaya ng mga pag-atake ng CSRF. Upang magamit ang Spring Security sa mga web application, maaari kang magsimula sa isang simpleng anotasyon: @EnableWebSecurity.

5. Ano ang nakapaloob sa kahulugan ng bean?

Sagot: Ang kahulugan ng bean ay naglalaman ng impormasyong tinatawag na configuration metadata na kailangang malaman ng container ang sumusunod:
  • Paano lumikha ng isang bean;
  • Mga detalye ng lifecycle ng bean;
  • bean dependencies.

6. Ano ang Spring Boot?

Sagot: Ang Spring Boot ay isang proyekto na nagbibigay ng paunang na-configure na hanay ng mga frameworks upang bawasan ang configuration ng boilerplate para makapagpatakbo ka ng Spring application nang may kaunting code.

7. Ano ang DispatcherServlet at para saan ito ginagamit?

Sagot: Ang DispatcherServlet ay isang pagpapatupad ng pattern ng disenyo ng Front Controller na humahawak sa lahat ng mga papasok na kahilingan sa web sa isang Spring MVC application. Ang pattern ng Front Controller (Enterprise Application Design Pattern) ay isang karaniwang pattern sa mga web application na ang trabaho ay dalhin ang buong kahilingan at iruta ito sa iba't ibang bahagi ng application para sa aktwal na pagproseso. Sa Spring MVC DispatcherServlet ay ginagamit upang mahanap ang tamang controller upang mahawakan ang kahilingan. Ginagawa ito gamit ang handler mapping: halimbawa, ang @RequestMapping annotation.

8. Kailangan ba ang spring-mvc.jar sa classpath o bahagi ba ito ng spring-core?

Sagot: Ang Spring-mvc.jar ay bahagi ng spring-core, na nangangahulugan na kung gusto mong gamitin ang Spring MVC framework sa iyong proyekto sa Java, dapat mong isama ang spring-mvc.jar sa classpath ng iyong application. Sa isang Java web application, ang spring-mvc.jar ay karaniwang inilalagay sa /WEB-INF/lib folder.

9. Ano ang mga pakinabang ng paggamit ng Spring?

Sagot: Nasa ibaba ang isang listahan ng ilang mga benepisyo ng paggamit ng Spring Framework:
  • Magaan – Ang tagsibol ay medyo magaan pagdating sa laki at transparency. Ang pangunahing bersyon ng Spring Framework ay halos 2 MB.
  • Inversion of control (IOC) - Nakakamit ang maluwag na coupling sa Spring gamit ang inversion ng control technique. Ang mga bagay ay nagbibigay ng kanilang mga dependency sa halip na lumikha o maghanap ng mga umaasa na bagay.
  • Aspect-Oriented - Sinusuportahan ng Spring ang programming na nakatuon sa aspeto at tinitiyak ang pare-parehong pag-unlad sa pamamagitan ng pag-decoupling ng logic ng negosyo ng application mula sa mga serbisyo ng system.
  • Mga Container - Gumagawa ang Spring Container ng mga bagay, pinagsasama-sama ang mga ito, kino-configure ang mga ito, at pinamamahalaan ang mga ito mula sa paglikha hanggang sa pagtatapon.
  • MVC Framework - Ang Spring web framework ay isang mahusay na dinisenyong MVC web framework na nagbibigay ng alternatibo sa mga web framework tulad ng Struts o iba pang masyadong idinisenyo o hindi gaanong sikat na mga web framework.
  • Pamamahala ng Transaksyon - Ang Spring ay may pare-parehong interface ng pamamahala ng transaksyon na maaaring i-scale sa mga lokal na transaksyon (hal. paggamit ng iisang database) o mga pandaigdigang transaksyon (hal. paggamit ng JTA).
  • Exception Handling - Nagbibigay ang Spring ng isang maginhawang API para sa pag-convert ng mga exception na partikular sa teknolohiya (gaya ng mga itinapon ng JDBC, Hibernate, o JDO) sa mga pare-pareho, walang check na mga exception.

10. Ano ang Spring beans?

Sagot: Ang spring beans ay mga instance ng mga bagay na pinamamahalaan ng Spring Container. Ang mga ito ay nilikha at ikinonekta ng balangkas at inilagay sa isang "bag ng bagay" (lalagyan) kung saan maaari mong makuha ang mga ito sa ibang pagkakataon. Ang mga kable ay kung ano ang bumubuo sa dependency injection. Nangangahulugan ito na masasabi mo lang, "Kailangan ko ang bagay na ito," at susundin ng balangkas ang ilang partikular na panuntunan upang makuha ang bagay na iyon.

11. Ano ang layunin ng module ng Core Container?

Sagot: Ang kernel container ay nagbibigay ng pangunahing functionality ng Spring framework. Ang pangunahing bahagi ng pangunahing lalagyan ay ang BeanFactory, isang pagpapatupad ng pattern ng Factory. Gumagamit ang BeanFactory ng kontrol ng Inversion upang paghiwalayin ang mga dependency sa pagsasaayos at detalye ng application mula sa aktwal na code ng aplikasyon.

12. Ano ang Konteksto ng Aplikasyon?

Sagot: Sa unang tingin, ang konteksto ng aplikasyon ay kapareho ng pabrika ng bean. Parehong nag-load ng mga kahulugan ng bean, pinagsama ang mga bean, at ipamahagi ang mga ito kapag hiniling. Ngunit nagbibigay din ito ng:
  • Isang tool para sa paglutas ng mga text message, kabilang ang suporta para sa internasyonalisasyon.
  • Isang karaniwang paraan upang i-load ang mga mapagkukunan ng file.
  • Mga kaganapan para sa beans na nakarehistro bilang mga tagapakinig.

13. Paano isama ang Java Server Faces (JSF) sa Spring?

Sagot: Ang JSF at Spring ay nagbabahagi ng ilan sa parehong mga tampok, lalo na sa lugar ng mga serbisyo ng Inversion of Control. Sa pamamagitan ng pagdedeklara ng JSF managed beans sa faces-config.xml configuration file, pinapayagan mo ang FacesServlet na i-instantiate ang bean na iyon sa startup. Ang iyong mga pahina ng JSF ay may access sa mga bean na ito at sa lahat ng kanilang mga ari-arian. Maaaring pagsamahin ang JSF at Spring sa dalawang paraan: DelegatingVariableResolver : May kasamang JSF variable resolver ang Spring na nagbibigay-daan sa iyong gamitin ang JSF at Spring nang magkasama. Ang DelegatingVariableResolver ay unang delegado ng paghahanap ng mga value sa default na interpreter ng pinagbabatayan na pagpapatupad ng JSF, at pagkatapos ay sa "konteksto ng negosyo" ng Spring WebApplicationContext. Ginagawa nitong madali ang pag-iniksyon ng mga dependency sa mga bean na pinamamahalaan ng JSF. FacesContextUtils : Ang isang custom na VariableResolver ay gumagana nang maayos kapag mina-map ang mga katangian nito sa mga beans sa faces-config.xml. Ngunit kung kailangan mong kumuha ng bean, pinapadali ng klase ng FacesContextUtils. Ito ay katulad ng WebApplicationContextUtils maliban na tumatanggap ito ng isang parameter ng FacesContext sa halip na isang parameter ng ServletContext.
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext (FacesContext.getCurrentInstance ());

14. Ano ang Spring MVC framework?

Mga Sagot: Ang Spring Web MVC framework ay nagbibigay ng isang modelo-view-controller na arkitektura at mga pre-built na bahagi na maaaring magamit upang bumuo ng flexible at maluwag na pinagsamang mga web application. Ang MVC pattern ay nagreresulta sa paghihiwalay ng iba't ibang aspeto ng isang application (input logic, business logic, at UI logic) habang pinapayagan ang maluwag na pagsasama sa pagitan ng mga elementong ito.

15. Paano gumagana ang pangangasiwa ng kaganapan sa Spring?

Sagot: Ang pagpoproseso sa ApplicationContext ay ibinibigay sa pamamagitan ng ApplicationEvent class at ang ApplicationListener interface. Iyon ay, kung ang isang bean ay nagpapatupad ng ApplicationListener , sa tuwing ang isang ApplicationEvent ay na-publish sa ApplicationContext , ang bean na iyon ay nakarehistro. Salamat sa pagbabasa at good luck sa iyong technical interview!
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION