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.
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);
Object o2 = new String("Tutorial");
o1 = o2;
o2 = null;
}
}
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);
Object b = new Long(100);
Object c = new String("100");
a = null;
a = c;
c = b;
b = a;
}
}
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
String
5-nji setirde görkezilýär. Şeýlelik bilen,
Integer
obýekt 5-nji setirden soň ýok edilmeli, sebäbi oňa salgylanýan üýtgeýjiler ýok. Üýtgeýjiler
b
we 6-njy we 7-nji setirlerdäki obýektlere we obýektlere
c
degişlidir , şonuň üçin olar gaýtadan ulanylmaýar.
String
Long
GO TO FULL VERSION