JavaRush /Blog Jawa /Random-JV /Ngumpul Sampah ing Jawa
Diana
tingkat

Ngumpul Sampah ing Jawa

Diterbitake ing grup

Garis perilaku pengumpul sampah (memori reclaimer)

Programmer Java ora perlu ngawasi alokasi memori amarga kolektor sampah ngatur memori kanthi otomatis. Garbage Collector dikelola dening Java Virtual Machine (JVM). Penagih sampah minangka proses prioritas rendah sing mlaku sacara periodik lan mbebasake memori sing digunakake dening obyek sing ora dibutuhake maneh. JVM sing beda duwe algoritma pengumpulan sampah sing beda. Ana sawetara algoritma sing digunakake, contone: algoritma pancacahan referensi utawa algoritma markup lan scraping.Ngumpulake sampah - 1

Mlaku-mlaku bakul sampah ing Jawa

JVM biasane mbukak kolektor sampah nalika memori gratis kurang. Nanging operasi kolektor sampah ora njamin yen ana memori gratis sing cukup. Yen ana ora cukup memori malah sawise Recovery, mbuwang JVM pangecualian OutOfMemoryError. Wigati dimangerteni manawa JVM kudu mbukak kolektor sampah paling ora sapisan sadurunge mbuwang pengecualian. Sampeyan bisa njaluk bakul sampah kanggo mbukak ing Jawa, nanging sampeyan ora bisa meksa tumindak iki.

Panjaluk kanggo mbukak tukang sampah

Kanggo njaluk panjalukan, sampeyan bisa nelpon salah siji saka cara ing ngisor iki:
System.gc()
Runtime.getRuntime().gc()

Cocog kanggo mbukak sampah

Sawijining obyek kudu dibuwang nalika ora kasedhiya ing aliran urip. Sawijining obyek bisa dibuwang ing macem-macem kasus:
  • Yen variabel jinis referensi sing nuduhake obyek disetel menyang "0", obyek kasebut kudu dibuwang yen ora ana referensi liyane.
  • Yen variabel jinis referensi sing nuduhake obyek digawe kanggo ngrujuk menyang obyek liyane, obyek kasebut kudu dibuwang yen ora ana referensi liyane.
  • Obyek sing digawe sacara lokal kanthi cara dibuwang nalika metode kasebut metu, kajaba diekspor saka metode kasebut (yaiku, bali utawa dibuwang minangka pangecualian).
  • Obyek sing ngrujuk saben liyane bisa tundhuk pembuangan yen ora ana sing kasedhiya kanggo thread urip.
Ayo katon ing conto:
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
    }
  }
Ing conto iki Integer, obyek (integer) sing asline dirujuk dening pointer o1 bisa dibuwang sawise baris 3 amarga o1 saiki nuduhake obyek String(string). Sanajan o2 digawe kanggo nyebut nol, obyek kasebut String(string) ora bisa didaur ulang amarga o1 nuduhake.

Finalisasi

Teknologi Jawa ngidini sampeyan nggunakake cara finalize()(finalize) kanggo nindakake reresik sing dibutuhake sadurunge kolektor sampah njupuk obyek saka memori. Cara iki diarani obyek dening pengumpul sampah nalika pengumpul sampah nemtokake manawa ora ana referensi maneh kanggo obyek kasebut. Iki diterangake ing kelas Object, sing tegese diwarisake dening kabeh kelas. Subkelas ngatasi cara finalize()kanggo mbebasake sumber daya sistem utawa kanggo ngresiki liyane:
protected void finalize() throws Throwable
Yen pangecualian sing ora kadhaptar dibuwang kanthi metode kasebut finalize(), pangecualian ora digatekake lan finalisasi obyek kasebut mandheg. Cara kasebut finalize()mung bakal dijaluk sapisan sajrone umur obyek. Sampeyan bisa nggunakake cara finalize()ing sembarang obyek kanggo nglindhungi saka pembuangan. Nanging ing kasus iki, kolektor sampah ora diaktifake maneh finalize()kanggo obyek iki. Cara kasebut finalize()bakal dijaluk sepisan sadurunge obyek dikumpulake. Nanging, bisa uga metode kasebut finalize()ora bakal diaktifake kanggo obyek tartamtu sajrone kabeh wektu, amarga bisa uga ora bisa dibuwang.

Ringkesan

Ing bagean iki, kita ndeleng proses pengumpulan sampah, yaiku teknik manajemen memori ing basa Jawa. Ngumpulake sampah ora bisa dipeksa. Kita sinau babagan macem-macem cara supaya obyek bisa didaur ulang lan sinau manawa metode kasebut finalize()dijaluk sadurunge obyek kasebut diklaim maneh dening tukang sampah.

olah raga

Pitakonan: Pira obyek sing bakal dibuwang sawise baris 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
    }
  }
Pilihan jawaban: A. 0 B. 1 C. 2 D. 3 E. Kode ora bisa disusun Pilihan sing bener: B Katrangan: Saka telung obyek sing digawe ing baris 1, 2 lan 3, mung obyek Integersing kudu dibuwang ing mburi baris 7. Referensi variabel, a, kang Originally referensi obyek Integer, referensi obyek Stringing baris 5. Mangkono, Integerobyek kudu dibuwang sawise baris 5, awit ora ana variabel sing referensi. Variabel blan cdeleng obyek Stringlan Longobyek ing baris 6 lan 7, supaya padha ora recyclable.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION