Kaj je Java Garbage Collector?
Zbiralnik smeti je nit demona, ki osvobaja spomin med izvajanjem. Zbiranje smeti se lahko izrazi tudi kot recikliranje spomina. Večinoma v JVM se zaradi svoje učinkovitosti uporablja zbirka smeti Oracle Hotspot. Spominsko območje v JVM, kjer so ustvarjeni predmeti, se imenuje heap. Kopča je razdeljena na dva dela:
- Prostor mlade generacije
- Stari / zasedeni generacijski prostor
Mlada generacija je ponovno razdeljena na 3 dele
- Edenski prostor
- Survivor From
- Survivor To
Podrobnejša razlaga je podana v naslednjih točkah. Na primer, če ste v svojem programu ustvarili predpomnilnik in če je predpomnilnik preživel številne cikle GC, potem to preide v staro generacijo. GC išče predmete, ki jih program ne potrebuje več in jih uničuje.
Zakaj zbiralnik smeti?
Pred Javo sta bila dva najbolj priljubljena jezika C in C ++. V C smo naleteli na calloc (), malloc (), realloc (), ki bo dodelil pomnilnik v pufru, v C ++ pa imamo destruktorje. Vse te funkcije so za funkcijo, imenovano upravljanje pomnilnika. Java ponuja Garbage Collector kot avtomatsko upravljanje pomnilnika iz glavnih dveh razlogov:
- Nekateri ustvarjeni predmeti postanejo nedosegljivi
- Sklicevanja od starih predmetov do mladih predmetov obstajajo le v majhnem številu.
Najboljša praksa za uporabo zbiralnika smeti je postavitev zastav na JVM.
Naj navedem primer za nedosegljive predmete
//class code
int i = 1;
if(i == 1)(
String s = abc;
System.out.println(s);
)
//class code
V zgornjem primeru bo Java ustvarila niz z nizom in obseg tega predmeta je ravno v tem, če bloka ni mogoče uporabiti zunaj. Ko bo zbiranje smeti potekalo nad tem razredom, bo označilo 's' kot nedosegljiv in neuporabljen predmet ter ga izbrisalo.
Funkcije v zbiralniku smeti
- Označi: začne se s korenskim vozliščem vaše aplikacije (glavno), sprehodi po grafu predmeta, označi predmete, ki so dosegljivi kot življenje.
- Delete / Sweep: Brisanje nedosegljivih predmetov. Ko GC izbriše predmete, ustvari luknjo v kopici, zaradi česar je nedosleden. Tako se uporablja zbijanje.
- Stiskanje: Stisnite pomnilnik tako, da se premikate po predmetih in označite dodelitev, ki je nepretrgana kot razdrobljena. To je zamudno opravilo.
Kako deluje Java Garbage Collector?
- Obstajata dve vrsti predmeta:
Živi predmeti: dosegljiv (reference iz drugega predmeta)
Mrtvi predmeti: nedosegljiv (nikjer ni naveden)
- Vsi na novo ustvarjeni predmeti so ustvarjeni v prostoru Eden (prostor mlade generacije).
- Ko je prostor Eden zapolnjen, se v prostoru mlade generacije zažene program minorGC (), ki označi vse neuporabljene ali mrtve predmete in jih pometa iz spomina.
- Predmeti, ki so preživeli ta cikel GC, bodo premaknjeni v Survivor From Space. Ponovi se isti postopek in tokrat, ko se predmeti premaknejo iz Edenovega prostora v Survivor Iz vesolja, GC preveri, ali je poln, mrtve predmete sprostijo, preživeli predmeti pa bodo premaknjeni tudi v Survivor.
- Ta postopek se ponovi in če so nekateri predmeti preživeli prag brez GC ciklov, so ti predmeti premaknjeni v prostor stare generacije.
- V tem scenariju JVM izvaja funkcijo majorGC (), ki teče skozi celoten prostor kopice, prepozna / označi neuporabljene (nične ali mrtve) predmete in pomete vse te predmete.
- Ne pozabite, da bodo pometani predmeti iz velikega prostora ustvarili luknje v pomnilniku, kar bo povzročilo puščanje spomina. Da bi se izognili takšnemu scenariju, zbiralec smeti izvaja kompaktnost pomnilniškega prostora
Primeri zbiralnika smeti na Javi
Primer system.gc ():
class Demo (
public void finalize()(
System.out.println(“Object”);
)
public static void main(String args())(
Demo obj1 = new Demo();
Demo obj2 = new Demo();
obj1 = null;
obj2 = null;
System.gc();
)
)
Izhod:
Predmet
Pojasnilo zgornje kode
- V zgornji kodi oba predmeta obj1 in obj2 kažeta na ničelno vrednost, tako da sta shranjena v prostor Eden z ničelnimi in nereferenciranimi vrednostmi
- Sistem gc () bo priklical demonsko nit zbiranja smeti in oba predmeta bosta izbrisana iz prostora.
Proti in slabosti
Spodaj je nekaj prednosti in slabosti Java Garbage Collector, kot sledi:
Prednosti gc:
- Zbiranje smeti poveča učinkovitost pomnilnika, saj bo izbrisalo vse neuporabljene in nične predmete
- Zbiranje smeti je samodejni postopek, zato razvijalec morda ne bo poskrbel zanj, saj mora v drugih jezikih brez programov za odvoz smeti skrbeti za težavno pomnilniško težavo.
Slabosti gc:
- Zbiralnik smeti bo izvajal glavno gc funkcijo, ki bo tekla skozi celoten prostor, s čimer bo vaša programska hitrost počasi za nekaj sekund.
- Ta postopek bo trajal več časa CPU-ja, zaradi česar je sistem kode počasnejši.
- Če delate na aplikaciji, ki zahteva ogromno pomnilnika, uporabite na voljo zastave JVM.
- Če je prostora za kopico polno in predmetov ni mogoče potegniti ali dodati več, potem Java vrže iz pomnilniške napake, kar upočasni celotno aplikacijo in povzroči puščanje spomina.
Priporočeni članki
To je priročnik Kaj je Java Garbage Collector ?. Tukaj razpravljamo o njegovem delovanju skupaj s funkcijami, primeri, prednosti in slabostmi Java zbiralca smeti. Če želite izvedeti več, si oglejte tudi naslednje članke -
- Konstruktor in Destruktor na Javi
- Destruktor na Javi
- Zmogljivost C # vs Java
- Kaj je JVM?