b'\n_START_ARTICLE_\n\xc5\xa0iuk\xc5\xa1li\xc5\xb3 surinktuvas\n_START_SECTION_\nSurinktuv\xc5\xb3 tipai\n_START_PARAGRAPH_\nKlasikinis \xc5\xa1iuk\xc5\xa1li\xc5\xb3 surinktuvas savo darbo metu pristabdo vykdom\xc4\x85 pagrindin\xc4\x99 program\xc4\x85. Kai kada (tarkim, \xc5\xbeaidimuose) tokios pauz\xc4\x97s nepriimtinos. Tuomet naudojamas inkrementinis surinktuvas, kuris dirba nuolat, \xc5\xa1iek tiek sul\xc4\x97tindamas pagrindin\xc4\x97s programos vykdymo greit\xc4\xaf. Daugiaprocesorin\xc4\x97se sistemose dar gali b\xc5\xabti naudojamas lygiagretus surinktuvas, kuris savo darbui u\xc5\xbeima vien\xc4\x85 i\xc5\xa1 procesori\xc5\xb3, palikdamas kitus vykdomai programai. Straipsnio ra\xc5\xa1ymo metu \xc5\xbeinomi inkrementiniai ir lygiagret\xc5\xabs surink\xc4\x97jai dirba l\xc4\x97\xc4\x8diau nei klasikiniai, tod\xc4\x97l juos naudoti be reikalo neverta._NEWLINE_Laiko momentas, kuomet bus sunaikintas objektas (taip pat ir kada bus i\xc5\xa1kviestas jo u\xc5\xbebaigiklis) paprastai n\xc4\x97ra determinuotas netgi tada, kai pati kalba turi metodus surinktuvui su\xc5\xbeadinti (kaip System.gc() Java kalboje). Tokie metodai laikomi \xe2\x80\x9erekomendaciniais\xe2\x80\x9c, ir virtuali ma\xc5\xa1ina j\xc5\xb3 paisyti neprivalo.\n_START_SECTION_\nNuskaitymo principai\n_START_PARAGRAPH_\n\xc5\xa0iuk\xc5\xa1li\xc5\xb3 surinktuvas per\xc5\xbei\xc5\xabri visus pasiekiamus objektus (tuos \xc4\xaf kurios tebeegistuoja nuorodos) ir nenaudoja laiko atmesti nepasiekiamiems (\xc4\xaf kuriuos nuorod\xc5\xb3 jau neb\xc4\x97ra). Tod\xc4\x97l paprastai neverta nenaudojam\xc5\xb3 objekt\xc5\xb3 saugoti ke\xc5\xa1uose, buferiuose, tikintis juos panaudoti pakartotinai - \xe2\x80\x9ejuodai dienai\xe2\x80\x9c susikaup\xc4\x99 objektai surinktuvo darb\xc4\x85 gali sul\xc4\x97tinti daugiau nei reikia laiko naujiems prireikus sukurti. Tokie dalykai tikslingi tik jei objektai labai dideli, susij\xc4\x99 su kitais resursais (duomen\xc5\xb3 baz\xc4\x97s jungtimis ir pan), suk\xc5\xabrimo algoritmas labai sud\xc4\x97tingas arba objekt\xc5\xb3 kaupiama nedaug. Objektus kaupti pakartotinam panaudojimui verta jei yra labai daug procesori\xc5\xb3 - surinktuvai da\xc5\xbenai neefektyv\xc5\xabs su daug procesori\xc5\xb3 ir svarbu juos su\xc5\xbeadinti kuo re\xc4\x8diau.\n_START_SECTION_\nGeneracijos\n_START_PARAGRAPH_\nDauguma naujai sukurt\xc5\xb3 objekt\xc5\xb3 egzistuoja trumpai bet nedidel\xc4\x97 j\xc5\xb3 dalis gyvena daug ilgiau. Dabartiniai surinktuvai da\xc5\xbenai optimizuojami i\xc5\xa1skiriant \xe2\x80\x9ejaunos\xe2\x80\x9c ir \xe2\x80\x9esenos\xe2\x80\x9c generacijos sritis. Nauji objektai pirmiausia kuriami jaunos generacijos srityje kuri kiekvienos surinkimo sesijos metu i\xc5\xa1tu\xc5\xa1tinama beveik visa. I\xc5\xa1lik\xc4\x99 objektai perkeliami \xc4\xaf senos generacijos srit\xc4\xaf kuriai surinkimo operacij\xc4\x85 galima atlikti daug re\xc4\x8diau. Kartais b\xc5\xabna dar tre\xc4\x8dia \xe2\x80\x9enuolatin\xc4\x97s generacijos\xe2\x80\x9c (angl. permanent generation) sritis kurios objektai negali b\xc5\xabti pa\xc5\xa1alinti kol apskritai veikia virtuali ma\xc5\xa1ina (sistemin\xc4\x97s klas\xc4\x97s ir pan).\n_START_SECTION_\nAtminties fragmentacija\n_START_PARAGRAPH_\nIlgiau dirbant, i\xc5\xa1kyla atminties fragmentacijos problema: skiriant viet\xc4\x85 naujiems objektams, \xe2\x80\x9eraikoma\xe2\x80\x9c nuo i\xc5\xa1tisin\xc4\x97s atminties dalies, ta\xc4\x8diau atlaisvinus laisvas tampa tik to objekto naudotas palyginus nedidelis fragmentas. Ilgiau padirbus, atmintis gali likti sudalyta \xc4\xaf daug nedideli\xc5\xb3 saleli\xc5\xb3, kuri\xc5\xb3 nebus galima panaudoti prireikus vietos didesniam naujam objektui. Atminties fragmentacijos problema sprend\xc5\xbeiama \xc4\xafvairiai (papras\xc4\x8diausiu atveju \xe2\x80\x93 pritr\xc5\xabkus vietos objektai \xe2\x80\x9eperstumdomi\xe2\x80\x9c, taip sukuriant reikiamo didumo srit\xc4\xaf). Siekiant suma\xc5\xbeinti fragmentacij\xc4\x85 kartais i\xc5\xa1skiriama didesn\xc4\x97 nei reikia atminties sritis (pavyzd\xc5\xbeiui, dydis baitais visada kartotinis a\xc5\xa1tuoniems), kad j\xc4\x85 atlaisvinus b\xc5\xabt\xc5\xb3 lengviau panaudoti antr\xc4\x85 kart\xc4\x85.\n_START_SECTION_\nPaskirstytas \xc5\xa1iuk\xc5\xa1li\xc5\xb3 surinktuvas\n_START_PARAGRAPH_\nPaskirstytas surinktuvas (angl. distributed garbage collector) reikalingas kuomet programa susideda i\xc5\xa1 skirtinguose kompiuteriuose vykdom\xc5\xb3 ir tik per tinkl\xc4\x85 s\xc4\x85veikauja\xc4\x8di\xc5\xb3 dali\xc5\xb3. Serveris kliento pra\xc5\xa1ymu gali sukurti nuotolin\xc4\xaf objekt\xc4\x85 ir perduoti jo nuorod\xc4\x85 klientui, ta\xc4\x8diau n\xc4\x97ra akivaizdu, kiek ilgai jis turi t\xc4\x85 sukurt\xc4\x85 nuotolin\xc4\xaf objekt\xc4\x85 saugoti (kada klientui jo tikrai daugiau nebeprireiks). Paskirstytas surinktuvas paprastai remiasi nuomos laiko principu. Klientas, gav\xc4\x99s i\xc5\xa1 serverio nuotolinio objekto nuorod\xc4\x85, pra\xc5\xa1o (si\xc5\xabsdamas speciali\xc4\x85 \xc5\xbeinut\xc4\x99) objekt\xc4\x85 saugoti norim\xc4\x85 laiko trukm\xc4\x99. Serveris atsakydamas siun\xc4\x8dia \xe2\x80\x9enuomos suteikimo\xe2\x80\x9c \xc5\xbeinut\xc4\x99, prane\xc5\xa1damas, kiek ilgai jis apsiima saugoti objekt\xc4\x85 (suteiktas saugojimo laikas gali b\xc5\xabti trumpesnis nei pra\xc5\xa1ytas). Jei \xc5\xa1iam laikui besibaigiant objektas vis dar reikalingas, klientas siun\xc4\x8dia nauj\xc4\x85 pra\xc5\xa1ym\xc4\x85 suteikti nuom\xc4\x85. Jei kliento programa nat\xc5\xabraliai arba avariniu b\xc5\xabdu u\xc5\xbesibaigia, kitose sistemos dalyse saugomi susij\xc4\x99 objektai tiesiog pa\xc5\xa1alinami pasibaigus nuomos laikui. Kartais b\xc5\xabna specialios \xc5\xbeinut\xc4\x97s jog objektas nebereikalingas, ta\xc4\x8diau jas naudoti sunku nes realiame tinkle \xc5\xbeinu\xc4\x8di\xc5\xb3 gavimo tvarka neb\xc5\xabtinai lygi j\xc5\xb3 siuntimo tvarkai._NEWLINE_\xc4\xaevair\xc5\xabs \xc5\xa1iuk\xc5\xa1li\xc5\xb3 surinktuvai pama\xc5\xbeu tampa svarbia fundamentali\xc5\xb3 informatikos tyrim\xc5\xb3 sritimi, kuriai daug padeda pastaruoju metu atsiradusios atviro kodo Java ir kitos virtualios ma\xc5\xa1inos.'