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.
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);
Object o2 = new String("Tutorial");
o1 = o2;
o2 = null;
}
}
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);
Object b = new Long(100);
Object c = new String("100");
a = null;
a = c;
c = b;
b = a;
}
}
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
Integer
sing kudu dibuwang ing mburi baris 7. Referensi variabel, a, kang Originally referensi obyek
Integer
, referensi obyek
String
ing baris 5. Mangkono,
Integer
obyek kudu dibuwang sawise baris 5, awit ora ana variabel sing referensi. Variabel
b
lan
c
deleng obyek
String
lan
Long
obyek ing baris 6 lan 7, supaya padha ora recyclable.
GO TO FULL VERSION