Prügikoristus Java-s: kõik, mida peate teadma

See artikkel Java prügikogumise kohta annab teile selge ettekujutuse selle toimimisest, selle tüüpidest ja erinevatest meetoditest Java prügiveo all

on üldotstarbeline programmeerimiskeel ja kui peaksite jõudma olukorrani, kus teie programmis on kasutamata andmeid ja te ei tea, kuidas neid käsitseda, on Java-s olev prügikogu kasulik. Nii et kirjutan selle artikli, et aidata teil nende funktsioonidega toime tulla.

Käsitlen teemasid järgmises järjekorras:





Alustame!

Mis on Java prügikoristus?

Javas seisavad programmeerijad silmitsi probleemiga, et nad peavad hävitama objektid mis on kasutusest väljas. Kuid prügikogujaga saab sellega lihtsalt hakkama. Selle prügikoguja peamine eesmärk on vabastada hunnik mälu, hävitades objektid, mis ei sisalda viidet. Tehnikat tuntakse kui Prügikogu.



Seda peetakse ka programmiks, mis aitab automaatset mäluhaldust teostada. Millal käivitatakse JVM-il, objektid luuakse hunnikule, mis on tegelikult programmile pühendatud osa mälust. Lõpuks pole mõnda objekti enam vaja. The prügikorjaja leiab need kasutamata objektid ja kustutab need mälu vabastamiseks.

  • Programmid, mis ei eralda mälu, võivad lõpuks katki minna, kui süsteemis pole eraldamiseks enam mälu. Kõigil neil programmidel on mälulekkeid.
  • Java-s prügivedu toimub programmi eluea jooksul automaatselt, välistades vajaduse mälu eraldada ja vältides seetõttu mälulekkeid.
  • Meetodid nagu tasuta () C ja kustuta () C ++ keeles kasutatakse, kuid Java-s toimub see automaatselt. Niisiis, tagab parema mäluhalduse.

Mõelgem nüüd, kuidas see automaatne prügivedu Java-s töötab.

Märge : Eeldatakse, et objekt sobib prügiveoks, kui see on kättesaamatu.



Kuidas prügivedu töötab?

Prügikogumine on protsess, kus töötatakse ka kuhja mäluga märk või tuvastage kättesaamatud objektid ja hävitage need tihendamisega.

Java-s olev prügikoristus on automaatne protsess ja programmeerija ei pea kustutatavaid objekte sõnaselgelt märkima. Rakendus elab peamiselt . Iga JVM saab rakendada prügivedu. Ainus nõue on, et see peaks vastama JVM-i spetsifikatsioonile.

Kuigi saadaval on palju JVM-e, Oracle’i oma HotSpot on ülekaalukalt kõige tavalisem, kuna see pakub jõulist ja küpset prügikoristusvalikut.

  • HotSpotil on mitu prügivedajat, mis on optimeeritud erinevateks kasutusjuhtumiteks, ja kõik prügikogujad järgivad sama põhiprotsessi.
  • Kõige esimeses etapis viitamata objektid on tuvastatud ja märgistatud prügiveo jaoks valmis.
  • Teises etapis kustutatakse märgitud objektid. Soovi korral saab mälu tihendada pärast prügikoguja objektide kustutamist, nii et ülejäänud objektid asuvad kuhja alguses külgnevas plokis. Tihendusprotsess hõlbustab mälu eraldamist järjest uutele objektidele pärast olemasolevatele objektidele eraldatud mälu plokki.

Kõik HotSpoti prügikogujad rakendavad põlvkondade kogumise strateegiat, mis kategoriseerib objektid vanuse järgi. Põlvkondliku prügivedu taga on see, et enamik esemeid on lühiajalised ja on varsti pärast loomist prügiveoks valmis.

Vaatame nüüd, millised on erinevad prügikogujad.

Prügikoguja tüübid

JVM pakub nelja erinevat prügikoristajat, kes kõik on põlvkondade kaupa. Igal ühel on oma eelised ja piirangud. Kasutaja valik on prügikoguja valik ning läbilaskevõimes ja rakenduse pausides võib olla palju erinevusi.

teisendades topelt int java

Nimelt on prügikogujaid 4 tüüpi.

  • Järjestikune prügikoguja (GC) :Kõik prügikoristusüritused viiakse läbi järjestikku ühe lõimena. Tihendamine viiakse läbi pärast igat prügivedu.
  • Paralleelne / läbilaskevõime GC: Väiksema / väikese prügikoristuse jaoks kasutatakse mitut niiti. Suuremat prügikoristust ja vana põlvkonna tihendamist kasutatakse ühe niidiga. Samuti kasutab variant Parallel paralleelselt prügiveoks ja vana põlvkonna tihendamiseks mitut lõime.
  • CMS-i koguja :Väikese / väiksema prügikoristuse jaoks kasutatakse mitut lõime, kasutades sama algoritmi kui Parallel. Suurem osa prügikoristusest on mitmekeermeline, kuid CMS töötab rakenduse sündmuste minimeerimiseks samaaegselt koos rakendusprotsessidega. Tihendamist ei tehta.
  • G1 koguja :See prügikoguja on põhimõtteliselt mõeldud CMS-i asendajaks. See on paralleelne ja samaaegne nagu CMS, kuid võrreldes vanemate prügikoristajatega töötab see üsna erinevalt.

Mõistame Java-s prügikogumise eeliseid.

Eelised

  • Java prügikoristuse suurim eelis on see, et see toimub automaatselt tegeleb kustutamisega kasutamata objektidest või mõnest objektist, millele pole juurdepääsu mäluressursside vabastamiseks.
  • Prügikogumine on nüüd paljude populaarsete programmeerimiskeelte uus standardkomponent.
  • See muudab Java-mälu tõhusaks. Sellepärast, et prügivedaja eemaldab viitamata objektid kuhja mälust.
  • see on automaatselt tehtud JVMi kuuluv prügikoguja.

Parimad tavad

Parim lähenemisviis Java prügiveoga kohandumiseks on JVM-ile märkide seadmine. Lippudel on võimalus reguleerida kasutatavat prügikoristajat. See aitab muuta selle kõige paremini taustaprogrammi töötlemiseks, kus pikad prügikoristamise pausid on vastuvõetavad.

Siinkohal tuleb märkida veel seda, et CMS-i prügikoguja on loodud pauside minimeerimiseks, mis muudab selle ideaalseks GUI-rakenduste jaoks, kus reageerimisvõime on väga oluline. Täiendavat peenhäälestust saab teha kuhja või selle sektsioonide suuruse muutmisega ja prügikoristuse efektiivsuse mõõtmisega.

Vaatame seda programmi.

klass Edureka {int a int b public void setData (int c, int d) {a = cb = d} public void showData () {System.out.println ('a =' + a väärtus) System.out.println ('B =' + b) väärtus} public static void main (String args []) {Edureka e1 = new Edureka () Edureka e2 = new Edureka () e1.setData (1,2) e2.setData (3, 4) e1.showData () e2.showData () // Edureka e3 // e3 = e2 //e3.showData () // e2 = null //e3.showData () // e3 = null //e3.showData ()}}

Sel juhul need kaksluuakse objektid ja kaks võrdlusmuutujat. Kui lisate teise käsu e3 = Null,kaks võrdlusmuutujat osutavad samale objektile. Ja kui muutujale pole viidet, siis e3 = e2e3.showData () Siinkohal pole objektile viitavaid viiteid ja see muutub prügiveo jaoks sobivaks.

Sellega jõuame selle artikli „Jagage Collection in Java“ lõppu. Oleme õppinud, kuidas eemaldada kuhjast kasutamata esemeid ja erinevaid kollektsiooni tüüpe.

Kui leiate selle artikli teemal „Java prügikogumine”, vaadake järgmist autor Edureka, usaldusväärne veebiõppeettevõte, mille võrgustik koosneb enam kui 250 000 rahulolevast õppijast ja mis levib üle kogu maailma. Oleme siin, et aidata teil igal sammul teie teekonnal, me pakume välja õppekava, mis on mõeldud õpilastele ja spetsialistidele, kes soovivad olla Java arendajad.

Kas teil on meile küsimus? Palun mainige seda selle kommentaari jaotises „Java prügikogu ' ja me pöördume teie poole niipea kui võimalik.