JavaRush /Java Blog /Random-TL /Tagakolekta ng Basura sa Java
Diana
Antas

Tagakolekta ng Basura sa Java

Nai-publish sa grupo

Linya ng pag-uugali ng kolektor ng basura (memory reclaimer)

Ang Java programmer ay hindi kailangang subaybayan ang paglalaan ng memorya dahil ang tagakolekta ng basura ay awtomatikong namamahala ng memorya. Ang Garbage Collector ay pinapatakbo ng Java Virtual Machine (JVM). Ang garbage collector ay isang mababang priyoridad na proseso na pana-panahong tumatakbo at nagpapalaya ng memorya na ginagamit ng mga bagay na hindi na kailangan. Ang iba't ibang JVM ay may iba't ibang algorithm sa pagkolekta ng basura. Mayroong ilang mga algorithm na ginamit, halimbawa: reference counting algorithm o markup at scraping algorithm.Pagkolekta ng basura - 1

Pagpapatakbo ng tagakolekta ng basura sa Java

Karaniwang pinapatakbo ng JVM ang kolektor ng basura kapag mababa ang libreng memorya. Ngunit ang operasyon ng kolektor ng basura ay hindi ginagarantiyahan na palaging may sapat na libreng memorya. Kung walang sapat na memorya kahit na pagkatapos ng pagbawi, ang JVM ay magtapon ng OutOfMemoryError exception. Pakitandaan na dapat patakbuhin ng JVM ang kolektor ng basura kahit isang beses bago magtapon ng exception. Maaari mong hilingin sa tagakolekta ng basura na tumakbo sa Java, ngunit hindi mo mapipilit ang pagkilos na ito.

Kahilingan na patakbuhin ang tagakolekta ng basura

Para humiling, maaari kang tumawag sa isa sa mga sumusunod na paraan:
System.gc()
Runtime.getRuntime().gc()

Angkop na patakbuhin ang kolektor ng basura

Ang isang bagay ay dapat itapon kapag ito ay hindi na magagamit sa buhay na batis. Ang isang bagay ay maaaring isailalim sa pagtatapon sa iba't ibang mga kaso:
  • Kung ang isang variable ng isang uri ng sanggunian na tumutukoy sa isang bagay ay nakatakda sa "0", ang bagay ay dapat na itapon kung walang iba pang mga sanggunian dito.
  • Kung ang isang variable ng isang uri ng sanggunian na tumutukoy sa isang bagay ay ginawa upang sumangguni sa isa pang bagay, ang bagay ay dapat na itapon kung walang iba pang mga sanggunian dito.
  • Ang mga bagay na nilikha nang lokal sa isang pamamaraan ay itatapon kapag lumabas ang pamamaraan, maliban kung na-export ang mga ito mula sa pamamaraang iyon (iyon ay, ibinalik o itinapon bilang isang pagbubukod).
  • Maaaring itapon ang mga bagay na tumutukoy sa isa't isa kung wala sa kanila ang available sa live na thread.
Tingnan natin ang isang halimbawa:
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
    }
  }
Sa halimbawang ito Integer, ang object (integer) na orihinal na tinukoy ng o1 ay maaaring itapon pagkatapos ng linya 3 dahil ang o1 ay tumutukoy na ngayon sa object String(string). Kahit na ang o2 ay nilikha upang tumukoy sa null, ang bagay String(string) ay hindi nare-recycle dahil ang o1 ay tumutukoy dito.

Pagtatapos

Binibigyang-daan ka ng teknolohiya ng Java na gumamit ng isang paraan finalize()(i-finalize) upang gawin ang kinakailangang paglilinis bago makuha ng kolektor ng basura ang isang bagay mula sa memorya. Ang pamamaraang ito ay tinatawag sa isang bagay ng kolektor ng basura kapag natukoy ng tagakolekta ng basura na wala nang mga sanggunian sa bagay. Inilalarawan ito sa klase Object, na nangangahulugang minana ito ng lahat ng klase. Ino-override ng subclass ang pamamaraan finalize()upang palayain ang sarili nito mula sa mga mapagkukunan ng system o para sa isa pang paglilinis:
protected void finalize() throws Throwable
Kung ang isang hindi rehistradong pagbubukod ay itinapon ng method finalize(), ang pagbubukod ay hindi papansinin at ang pagwawakas ng bagay na iyon ay hihinto. finalize()Isang beses lang i-invoke ang method sa buong buhay ng object. Posibleng gumamit ng paraan finalize()sa anumang bagay upang maprotektahan ito mula sa pagtatapon. Ngunit sa kasong ito, ang kolektor ng basura ay hindi na aktibo finalize()para sa bagay na ito. Ang pamamaraan finalize()ay palaging gagamitin nang isang beses bago ang bagay ay makolekta ang basura. Gayunpaman, posible na ang pamamaraan finalize()ay hindi isaaktibo para sa isang naibigay na bagay sa buong tagal ng pagkakaroon nito, dahil maaaring hindi ito napapailalim sa pagtatapon.

Buod

Sa seksyong ito, tiningnan namin ang proseso ng pagkolekta ng basura, na isang diskarte sa pamamahala ng memorya sa wikang Java. Hindi maaaring pilitin ang pagkolekta ng basura. Nalaman namin ang tungkol sa iba't ibang paraan upang gawing karapat-dapat ang mga bagay para sa pag-recycle at nalaman namin na ang pamamaraan finalize()ay ginagamit bago ang bagay ay i-reclaim ng basurero.

Mag-ehersisyo

Tanong: Ilang bagay ang sasailalim sa pagtatapon pagkatapos ng linya 7?
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
    }
  }
Mga pagpipilian sa sagot: A. 0 B. 1 C. 2 D. 3 E. Hindi maaaring isama ang code Tamang opsyon: B Paliwanag: Sa tatlong bagay na nilikha sa linya 1, 2 at 3, ang bagay lamang Integerang dapat itapon sa dulo ng linya 7. Ang mga variable na sanggunian, a, na orihinal na tumutukoy sa bagay Integer, ay tumutukoy sa bagay Stringsa linya 5. Kaya, Integerang bagay ay dapat na itapon pagkatapos ng linya 5, dahil walang mga variable na tumutukoy dito. Mga variable bat csumangguni sa mga bagay Stringat Longbagay sa mga linya 6 at 7, kaya hindi sila nare-recycle.
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION