JavaRush /Java Blog /Random-TL /Pag-aaral sa Google | Antas 4 | Lektura 11
sunshine4545
Antas
Минск

Pag-aaral sa Google | Antas 4 | Lektura 11

Nai-publish sa grupo
Pag-aaral sa Google |  Antas 4 |  Lektura 11 - 1

1. Paano gumagana ang tagakolekta ng basura sa Java

Ang garbage collector ay isang mababang priyoridad na proseso na pana-panahong tumatakbo at nagpapalaya ng memorya na ginagamit ng mga bagay na hindi na kailangan. Ang kolektor ng basura ay tumatakbo sa background, kahanay sa programa, sa isang hiwalay na thread. Ang batayan para sa pagkolekta ng basura ay hindi pagbibilang ng sanggunian, ngunit ang paghihiwalay ng mga bagay sa dalawang uri - maabot at hindi maabot. Ang isang bagay ay itinuturing na naaabot (buhay) kung ito ay tinutukoy ng isa pang naaabot (nabubuhay) na bagay. Ang pagiging maaabot ay binibilang mula sa mga thread. Ang mga tumatakbong thread ay palaging itinuturing na naaabot (buhay), kahit na walang sumangguni sa kanila. Ang lahat ng mga bagay sa Java ay naka-imbak sa isang espesyal na lugar ng memorya na tinatawag na heap. Ang lahat ng mga bagay sa mga programa ay maaaring nahahati sa dalawang uri - medyo nagsasalita, simpleng mga bagay at "mahaba ang buhay". Ang mga bagay na "mahabang buhay" ay ang mga nakaligtas sa maraming koleksyon ng basura. Kadalasan ay mananatili sila hanggang sa katapusan ng programa. Bilang resulta, ang karaniwang heap, kung saan nakaimbak ang lahat ng nilikhang bagay, ay nahahati sa ilang bahagi. Ang unang bahagi ay may magandang pangalan - Eden (biblikal na "Hardin ng Eden"), ang mga bagay ay pumupunta rito pagkatapos nilang likhain. Nasa bahaging ito na ang memorya ay inilalaan para sa mga bagong bagay kapag sumulat tayo ng bago. Maraming bagay ang maaaring gawin, at kapag naubusan ng espasyo sa lugar na ito, magsisimula ang una, "mabilis" na koleksyon ng basura. Dapat sabihin na ang kolektor ng basura ay napakatalino at pumipili ng isang algorithm ng trabaho depende sa kung ano ang higit pa sa bunton - basura o gumaganang mga bagay. Kung halos lahat ng mga bagay ay basura, minarkahan ng kolektor ang mga "live" na bagay at inililipat ang mga ito sa isa pang lugar ng memorya, pagkatapos nito ang kasalukuyang lugar ay ganap na nalinis. Kung kakaunti ang basura at karamihan dito ay inookupahan ng mga bagay na may buhay, minarkahan nito ang basura, nililinis ito, at inaayos ang mga natitirang bagay. Ang lugar ng memorya kung saan inililipat ang lahat ng bagay na hindi bababa sa isang koleksyon ng basura ay tinatawag na Survival Space. Ang Survival Space naman ay nahahati sa mga henerasyon. Ang bawat bagay ay itinalaga ng isang henerasyon batay sa kung gaano karaming mga koleksyon ng basura ang naranasan nito. Kung mayroon man, ito ay kabilang sa "Generation 1", kung 5 - sa "Generation 5". Magkasama, ang Eden at Survival Space ay bumubuo ng isang lugar na tinatawag na Young Generation. Bilang karagdagan sa Young Generation, mayroong isa pang memory area sa heap - Old Generation ("old generation"). Ito ang mga napakatagal na bagay na nakaligtas sa maraming koleksyon ng basura. Ito ay mas kumikita upang iimbak ang mga ito nang hiwalay mula sa lahat ng iba pa. At kapag puno na ang Old Generation area, i.e. Kahit na mayroong napakaraming pangmatagalang bagay sa programa na walang sapat na memorya, ang isang kumpletong koleksyon ng basura ay isinasagawa. Pinoproseso nito hindi lamang isang lugar ng memorya, ngunit sa pangkalahatan ang lahat ng mga bagay na nilikha ng Java machine. Natural, ito ay nangangailangan ng mas maraming oras at mapagkukunan. Iyon ang dahilan kung bakit napagpasyahan na mag-imbak ng mga pangmatagalang bagay nang hiwalay. Kapag naubusan ng espasyo sa ibang lugar, isinasagawa ang tinatawag na “mabilis na koleksyon ng basura”. Ito ay sumasaklaw lamang sa isang lugar, at dahil dito ito ay mas matipid at mas mabilis. Sa dulo, Kapag barado na maging ang lugar para sa mga matagal nang residente, ang ganap na paglilinis ay pumapasok sa away. Kaya, ang pinaka "mabigat" na tool ay ginagamit lamang ng assembler kapag hindi na kinakailangan. Pag-aaral sa Google |  Antas 4 |  Lektura 11 - 2

2. Anong uri ng mga basurero ang mayroon?

Ang Java ay may pitong uri ng mga basurero:
  1. Serial Garbage Collector
  2. Parallel Garbage Collector
  3. CMS Garbage Collector
  4. G1 Mangongolekta ng Basura
  5. Epsilon Garbage Collector
  6. Z tagakolekta ng basura
  7. Shenandoah Garbage Collector

3. Ano ang "mga henerasyon" ng mga bagay

Ang lahat ng mga bagay sa Survival Space ay nahahati sa mga henerasyon. Ang bawat bagay ay itinalaga ng isang henerasyon batay sa kung gaano karaming mga koleksyon ng basura ang naranasan nito. Kung mayroon man, ito ay kabilang sa "Generation 1", kung 5 - sa "Generation 5".

4. Para saan ginagamit ang SoftReference?

Ang isang bagay na isinangguni lamang ng malambot na mga sanggunian ay maaaring makolekta ng basura kung ang programa ay naubusan ng memorya. Kung ang isang programa ay biglang naubusan ng memorya, bago magtapon ng OutOfMemoryException, tatanggalin ng tagakolekta ng basura ang lahat ng mga bagay na isinangguni ng mga soft link at susubukang maglaan muli ng memorya sa programa. Ang isang bagay na pinipigilan lamang na mamatay sa pamamagitan ng SoftReference ay maaaring makaligtas sa anumang bilang ng mga koleksyon ng basura at malamang na masisira kung ang programa ay maubusan ng memorya.

5. Halimbawa ng paggamit ng SoftReference

Ang mga SoftReferences ay partikular na idinisenyo para sa pag-cache. Ipagpalagay natin na ang isang client program ay madalas na humihiling ng iba't ibang data mula sa isang server program. Pagkatapos ay maaaring i-cache ng programa ng server ang ilan sa mga ito, gamit ang SoftReference para dito. Kung ang mga bagay na iniingatan mula sa kamatayan sa pamamagitan ng malambot na mga sanggunian ay kumukuha ng halos lahat ng memorya, pagkatapos ay tatanggalin lamang sila ng kolektor ng basura at iyon na.

6. Halimbawa ng paggamit ng WeakReference

Kung mayroon lamang mahinang mga sanggunian sa isang bagay, kung gayon ang bagay na ito ay buhay, ngunit ito ay masisira sa susunod na koleksyon ng basura. Ang isang bagay na pinipigilan na mamatay sa pamamagitan ng WeakReference lamang ay hindi makakaligtas sa susunod na koleksyon ng basura. Ngunit hanggang sa mangyari ito, makukuha mo ito sa pamamagitan ng pagtawag sa isang pamamaraan get()sa WeakReference at pagtawag sa mga pamamaraan nito o paggawa ng iba pa. Ang isang halimbawa ng paggamit ng WeakReference ay WeakHashMap.

7. Bakit kailangan ang WeakHashMap

Ang WeakHashMap ay isang HashMap na ang mga susi ay mahihinang sanggunian - WeakReference. Nag-iimbak ka ng mga pares ng mga bagay sa isang WeakHashMap - isang susi at isang halaga. Ngunit ang WeakHashMap ay hindi direktang tumutukoy sa mga susi, ngunit sa pamamagitan ng WeakReference. Samakatuwid, kapag ang mga bagay na ginamit bilang mga susi ay hindi na maabot, sila ay masisira sa susunod na koleksyon ng basura. Nangangahulugan ito na ang kanilang mga halaga ay awtomatikong aalisin mula sa WeakHashMap. Ang WeakHashMap ay napaka-maginhawa para sa pag-iimbak ng karagdagang impormasyon para sa ilang mga bagay. Una, napakadaling makuha kung gagamitin mo ang mismong bagay bilang isang susi. Pangalawa, kung ang isang bagay ay nawasak, ito at lahat ng data na nauugnay dito ay mawawala sa HashMap. Halimbawa, ang programa ay may isang thread na sinusubaybayan ang gawain ng ilang mga bagay sa gawain at nagsusulat ng impormasyon tungkol sa mga ito sa log. Pagkatapos ay maiimbak ng thread na ito ang mga sinusubaybayang bagay sa naturang WeakHashMap. Sa sandaling hindi na kailangan ang mga bagay, tatanggalin sila ng kolektor ng basura, at awtomatikong tatanggalin ang mga reference sa kanila mula sa WeakHashMap.

8. Ano ang magtotroso

Ang isang Logger object ay ginagamit upang mag-log ng mga mensahe para sa isang partikular na system o bahagi ng application. Ang log ay isang listahan ng mga kaganapan na naganap. Kadalasan, ang impormasyon tungkol sa mga parameter ng pamamaraan kung saan ito tinawag, lahat ng mga na-intercept na error, at maraming intermediate na impormasyon ay nakasulat sa log. Ang buong proseso ng pag-log ay binubuo ng tatlong bahagi.
  • Ang unang bahagi ay pagkolekta ng impormasyon.
  • Ang ikalawang bahagi ay ang pagsasala ng mga nakolektang impormasyon.
  • Ang ikatlong bahagi ay isang pagtatala ng napiling impormasyon.

9. Paano mag-set up ng logger

  1. Magdagdag ng dependency sa pom.xml.
  2. Idagdag ang log4j.properties file sa mga mapagkukunan.
    Karaniwan, ang mga setting ng log4j logger ay nakatakda sa log4j.properties file. Sa file na ito maaari mong tukuyin ang ilang mga appenders - mga bagay kung saan isusulat ang data.
  3. Idagdag sa klase na may lohika ng negosyo private static final Logger log = Logger.getLogger(ххх.class);.
Ginamit:
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION