JavaRush /Java Blog /Random-TK /Java-da hapa ýygnaýjy hakda has giňişleýin maglumat

Java-da hapa ýygnaýjy hakda has giňişleýin maglumat

Toparda çap edildi
Salam! Iň soňky leksiýada ilki bilen Java diliniň gurlan mehanizmi - zibil ýygnaýjy bilen tanyşdyk. Programmaňyz işleýän wagtynda fonda işleýär, zerur däl zatlary ýygnaýar, soň bolsa ýok ediler. Şeýlelik bilen, geljekde täze zatlar döretmek üçin ýady boşadýar. Bu leksiýada onuň işleýiş ýörelgesine has içgin serederis. Mysal üçin, bir obýekt nädip we haýsy wagtda zerur däl bolýar? Zibil ýygnaýjy bu barada nädip bilýär? Bu soraglara jogap bereris :) Leksiýamyz has umumy syn: bu materialy ýatda saklamagyň zerurlygy ýok. Memoryadyň we zibil ýygnaýjynyň işi bilen baglanyşykly gözýetimleriňizi giňeltmek üçin niýetlenendir, şonuň üçin ony okamak we özüňiz üçin täze bir zat öwrenmek ýeterlik bolar :) Geliň! Ilki bilen ýatda saklamaly zadyňyz, zibil ýygnaýjy programmaňyz bilen paralel işleýär . Munuň bir bölegi däl we aýratyn işleýär: muny düşündirmek üçin, soňky leksiýada robot tozan sorujy bilen meňzeşlik berdik. Aslynda bu mydama beýle däldi. Ozal zibil ýygnaýjy, programmaňyz bilen bir sapakda işlenip düzüldi. Käbir tertibe görä, birnäçe minutda bir gezek programmada gereksiz zatlaryň bardygyny barlap başlady. Mesele bu barlag we zibil ýygnamak wagtynda programma doňup, ýerine ýetirilmedi. Bir ofisde işleýärsiňiz diýip göz öňüne getiriň. Emma soň arassalaýjy aýal gelip, otagdaky pollary ýuwmaly. Ol sizi 5 minut kompýuteriň aňyrsyndan kowýar we tä tämizlenýänçä garaşýarsyňyz. Bu döwürde işläp bilmersiňiz. Bu, hapa ýygnaýjylaryň takmynan işleýşi ýaly :) Soňra bu mehanizm üýtgedildi, indi bolsa zibil ýygnaýjy programmanyň işini haýallatman fonda işleýär. Bir obýektiň oňa salgylanma galman ölýändigini eýýäm bilýärsiňiz. Emma zibil ýygnaýjy, aslynda salgylanmalary hasaplamaýar . Birinjiden, gaty uzyn bolup biler. Ikinjiden, bu gaty täsirli däl. Galyberse-de, obýektler biri-birine ýüz tutup bilerler! Zibil ýygnaýjy hakda has giňişleýin - 2Suratda 3 obýektiň biri-birine salgylanýan mysaly görkezilýär, ýöne başga hiç kim olara salgylanmaýar. .Agny, programmanyň galan böleginiň işlemegi üçin zerur däl. Zibil ýygnaýjy diňe salgylanmalary sanasa, bu 3 obýektiň hemmesi galar we ýady boşatmazdy: olara salgylanmalar bar! Gämi gämisi bilen deňeşdirip bolar. Uçuş wagtynda kosmonawtlar abatlamak üçin ätiýaçlyk şaýlarynyň sanawyny barlamak kararyna geldiler we olaryň arasynda rul we adaty awtoulagdan pedal tapdylar. Olara bu ýerde zerurlyk ýok we goşmaça ýer tutýarlar. Bu bölekler birleşdirilen we käbir funksiýalary bar bolsa-da, kosmos gämisiniň işleýşiniň çäginde zerur däl zibil, gutulmak has gowudyr. Şonuň üçin Java zibil ýygnamak üçin salgylanmalary däl-de, obýektleri iki görnüşe bölmek - elýeterli we ýetip bolmajak esas döretmek kararyna geldi.. Bir obýektiň elýeterlidigini nädip kesgitlemeli? Ussat hemme zat ýönekeý. Bir obýekte başga bir ýetip bolýan jisim salgylansa, baryp bolýar. Bu bolsa “elýeterlilik zynjyryna” getirýär. Programma başlanda başlaýar we işiniň bütin dowamynda dowam edýär. Munuň ýaly bir zat görünýär: Zibil ýygnaýjy hakda has giňişleýin - 4Suratdaky peýkam programmamyzyň ýerine ýetiriji koduny görkezýär. Kodda, mysal üçin esasy () usulda, obýektlere salgylanmalar döredilýär. Bu obýektler täze obýektlere, käbirlerine we ş.m. degişlidir. Obýekt baglanyşyklarynyň zynjyry emele gelýär . Bu kök zynjyryň üsti bilen haýsydyr bir obýekte “kök baglanyşyga”, ýagny ýerine ýetiriş kodunda gönüden-göni döredilen birine ýetip bolýan bolsa, elýeterli hasaplanýar. Biziň suratymyzda gök reňkde görkezilýär. Emma haýsydyr bir obýekt bu zynjyrdan çykan bolsa, ýagny häzirki ýerine ýetirilýän koddaky üýtgeýänleriň hiç birinde-de salgylanma ýok, oňa “baglanyşyk zynjyry” arkaly baryp bolmajak hem bolsa - elýeterli däl hasaplanýar. Maksatnamamyzda şeýle iki zat gyzyl reňkde görkezilýär. Üns beriň: bu “gyzyl” zatlaryň biri-birine baglanyşygy bar. Earlieröne, öňem aýdyşymyz ýaly, Java-daky häzirki zaman zibil ýygnaýjy salgylanma hasaplamaýar. Bir obýektiň elýeterli ýa-da ýetip bolmajakdygyny kesgitleýär . Şonuň üçin suratdaky iki gyzyl zat onuň ýyrtyjysyna öwrüler. Indi başdan ahyryna çenli ähli prosese seredeliň we şol bir wagtyň özünde ýadyň Java-da nähili işleýändigini göreliň :) Java-daky ähli obýektler üýşmek diýilýän ýörite ýatda saklanýar . Ordinaryönekeý dilde “üýşmek” hemme zadyň çalaja ýatýan ýerleriniň dagydyr. Javaöne Java-daky üýşmek beýle däl. Örän mantykly we ýerlikli gurluşa eýe. Gowy günleriň birinde, Java programmistleri öz programmalaryndaky ähli obýektleriň iki görnüşe - deňeşdirip aýdylanda, ýönekeý zatlara we “uzak ömre” bölünip biljekdigini ýüze çykardylar . “Uzak ýaşan” zatlar, köp zibil ýygnamakdan aman galan zatlar. Köplenç programma gutarýança bar bolar. Netijede, ähli döredilen zatlaryň saklanýan umumy üýşmesi birnäçe bölege bölündi. Birinji bölümiň ajaýyp ady bar - Erem (bibliýa “Erem bagy”). Bu ajaýyp at, sebäbi obýektler döredilenden soň gidýär. Hut şu bölümde ýazanymyzda täze zatlar üçin ýat bölünýärnew. Köp obýekt döredilip bilner we bu sebitde ýer gutaranda ilkinji, “çalt” hapa ýygnamak başlaýar. Zibil ýygnaýjynyň gaty akyllydygyny we üýşmeleňdäki zatlara - hapa ýa-da işleýän zatlara baglylykda iş algoritmini saýlaýandygyny aýtmak gerek. Obýektleriň hemmesi diýen ýaly zibil bolsa, kollektor “janly” zatlary belleýär we başga bir ýat meýdanyna geçirýär, şondan soň häzirki ýer doly arassalanýar. Zibil az bolsa we köpüsini janly jisimler eýeleýän bolsa, ol hapa bellik edýär, arassalaýar we galan zatlary tertipleýär. “Kollektor“ janly ”zatlary belleýär we başga bir ýat ýerine geçirýär” diýdik, ýöne haýsy? Iň azyndan bir zibil ýygnamagyndan aman galan ähli zatlaryň geçirilýän ýadyna “Survival Space” diýilýär . Diri galan giňişlik hem öz gezeginde nesillere bölünýär . Her bir jisime näçe zibil kolleksiýasyny başdan geçirendigi esasynda nesil berilýär. Eger biri bar bolsa, “1-nji nesil”, 5-si bolsa “5-nji nesil” degişlidir. “Eden” we “Survival Space” bilelikde “Generationaş nesil” diýilýän meýdany emele getirýär . Generationaş nesilden başga-da, üýşmeleňde ýene bir ýat meýdany bar - Köne nesil (“köne nesil”). Bular köp zibil ýygnamakdan aman galan gaty uzak zatlar. Olary beýlekilerden aýratyn saklamak has peýdalydyr. Diňe Köne Nesil meýdany doly bolanda, ýagny Hatda programmada uzak ömürli zatlar bar welin, ýeterlik ýat ýok, doly zibil ýygnalýar. Diňe bir ýat meýdany däl, umuman Java enjamy tarapyndan döredilen ähli obýektler işleýär. Elbetde, has köp wagt we serişde gerek. Şonuň üçin uzak ömürli zatlary aýratyn saklamak kararyna gelindi. Beýleki ýerlerde boşluk gutaranda, “çalt hapa ýygnamak” diýilýär. Diňe bir sebiti öz içine alýar we bu sebäpli has tygşytly we has çalt. Netijede, hatda ýüz ýaşlylar üçin meýdança eýýäm ýapyk bolanda, doly arassalamak kynçylyklara girýär. Şeýlelik bilen, iň “agyr” gural ýygnaýjy tarapyndan diňe zerur bolmadyk ýagdaýynda ulanylýar. Sxematiki taýdan, üýşmegiň we arassalamagyň gurluşy şeýle: Zibil ýygnaýjy hakda has giňişleýin - 5
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION