JavaRush /Java Blog /Random-TK /Java-da zibil ýygnaýjy
Diana
Dereje

Java-da zibil ýygnaýjy

Toparda çap edildi

Zibil ýygnaýjynyň özüni alyp barşynyň ugry (ýady yzyna almak)

Java programmisti ýadyň paýlanyşyna gözegçilik etmegiň zerurlygy ýok, sebäbi zibil ýygnaýjy ýady awtomatiki dolandyrýar. Zibil kollektoryny Java wirtual maşyn (JVM) dolandyrýar. Zibil ýygnaýjy, wagtal-wagtal işleýän we indi zerur däl zatlar tarapyndan ulanylýan ýady boşadýan pes ähmiýetli prosesdir. Dürli JVM-lerde hapa ýygnamak algoritmleri bar. Ulanylýan birnäçe algoritm bar, mysal üçin: salgylanma sanamak algoritmi ýa-da bellemek we döwmek algoritmleri.Zibil ýygnamak - 1

Java-da zibil ýygnaýjyny işletmek

JVM, adatça ýadyň pes bolanda zibil ýygnaýjyny işleýär. Aöne zibil ýygnaýjyny işletmek elmydama ýeterlik ýadyň boljakdygyny kepillendirmeýär. Dikeldilenden soň hem ýeterlik ýat bolmasa, JVM OutOfMemoryError kadasyny taşlaýar. JVM kadadan çykmazdan ozal azyndan bir gezek zibil ýygnaýjysyny işletmelidigini ýadyňyzdan çykarmaň. Zibil ýygnaýjydan Java-da işlemegini haýyş edip bilersiňiz, ýöne bu hereketi mejbur edip bilmersiňiz.

Zibil ýygnaýjyny işletmegi haýyş

Haýyş etmek üçin aşakdaky usullaryň birine jaň edip bilersiňiz:
System.gc()
Runtime.getRuntime().gc()

Zibil ýygnaýjyny işletmäge laýyklyk

Bir jisim indi janly akym üçin ýok bolanda taşlanmalydyr. Obýekt dürli ýagdaýlarda ýok edilip bilner:
  • Bir obýekte salgylanma görnüşiniň üýtgeýjisi "0" diýip kesgitlenen bolsa, başga salgylanmalar ýok bolsa, obýekt ýok edilmeli.
  • Bir obýekte salgylanma görnüşiniň üýtgeýjisi başga bir obýekte salgylanmak üçin döredilen bolsa, başga salgylanma ýok bolsa, obýekt ýok edilmeli.
  • Usulda ýerli görnüşde döredilen obýektler, şol usuldan eksport edilmese (ýagny kadadan çykma ýa-da zyňylmasa) usul çykanda taşlanýar.
  • Biri-birine salgylanýan obýektler, olaryň hiç biri-de göni ýaýlymda ýok bolsa, ýok edilip bilner.
Bir mysala seredeliň:
public class TestGC
  {
    public static void main(String [] args)
    {
      Object o1 = new Integer(3);               // Line 1
      Object o2 = new String("Tutorial");       // Line 2
      o1 = o2;                                  // Line 3
      o2 = null;                                // Line 4
      // Rest of the code here
    }
  }
Bu mysalda Integer, o1 görkeziji bilen görkezilen obýekt (bitewi) 3-nji setirden soň taşlanyp bilner, sebäbi o1 indi obýekti String(setiri) aňladýar. O2 null diýmek üçin döredilen hem bolsa, obýekt String(setir) o1 degişlidigi sebäpli gaýtadan ulanylmaýar.

Jemleme

finalize()Java tehnologiýasy , zibil ýygnaýjy bir zady ýatdan çykarmazdan ozal zerur arassalamak usulyny (gutarnykly) ulanmaga mümkinçilik berýär . Bu usul, zibil ýygnaýjy obýekte başga salgylanmalaryň ýokdugyny kesgitläninde bir zat çagyrýar. Bu synpda beýan edilýär Object, ýagny ähli synplara miras galypdyr. finalize()Kiçi topar özüni ulgam çeşmelerinden azat etmek ýa-da başga bir arassalamak usulyny ýok edýär :
protected void finalize() throws Throwable
Eger usul bilen hasaba alynmadyk kadadan çykma bolsa finalize(), kadadan çykma hasaba alynmaýar we şol obýektiň gutarmagy bes edilýär. Usul finalize()obýektiň ömrüniň dowamynda diňe bir gezek ulanylar. finalize()Zyňylmakdan goramak üçin islendik obýektde usul ulanyp bolýar . finalize()Emma bu ýagdaýda zibil ýygnaýjy indi bu zat üçin işjeňleşdirilmeýär . Bu usul, finalize()zibil ýygnamazdan ozal hemişe ulanylar. finalize()Şeýle-de bolsa, usulyň ýok edilmezligi sebäpli, berlen obýektiň tutuş dowamlylygy üçin işjeňleşdirilmezligi mümkin .

Gysgaça mazmun

Bu bölümde, Java dilinde ýadyň dolandyryş usuly bolan zibil ýygnamak prosesine göz aýladyk. Zibil ýygnamaga mejbur edip bolmaz. Obýektleri gaýtadan işlemäge hukukly etmegiň dürli usullary barada öwrendik we usulyň finalize()zibil ýygnaýjy tarapyndan yzyna alynmazdan ozal ulanylýandygyny öwrendik.

Maşk

Sorag: 7-nji setirden soň näçe obýekt ýok ediler?
public class TutorialGC
  {
    public static void main(String [] args)
    {
      Object a = new Integer(100);  // Line1
      Object b = new Long(100);     // Line2
      Object c = new String("100"); // Line3
      a = null;                     // Line4
      a = c;                        // Line5
      c = b;                        // Line6
      b = a;                        // Line7
      // Rest of the code here
    }
  }
Jogap wariantlary: A. 0 B. 1 C. 2 D. 3 E. Kod düzülip bilinmez Dogry wariant: B Düşündiriş: 1, 2 we 3 setirlerde döredilen üç obýektden diňe obýekt Integerýok edilmeli. 7-nji setiriň soňy. Üýtgeýän salgylanmalar, aslynda obýekte salgylanýar Integer, obýekt String5-nji setirde görkezilýär. Şeýlelik bilen, Integerobýekt 5-nji setirden soň ýok edilmeli, sebäbi oňa salgylanýan üýtgeýjiler ýok. Üýtgeýjiler bwe 6-njy we 7-nji setirlerdäki obýektlere we obýektlere cdegişlidir , şonuň üçin olar gaýtadan ulanylmaýar.StringLong
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION