CodeGym /Blog Jawa /Acak /Liyane babagan tukang sampah
John Squirrels
tingkat
San Francisco

Liyane babagan tukang sampah

Diterbitake ing grup
Hi! Ing wulangan pungkasan, kita pisanan kenal karo tukang sampah sing dibangun ing Jawa lan entuk gambaran kasar babagan cara kerjane. Kerjane ing latar mburi nalika program sampeyan lagi mlaku, ngumpulake obyek sing ora perlu sing bakal dibusak mengko. Mangkono, mbebasake memori sing bisa digunakake kanggo nggawe obyek anyar ing mangsa ngarep.
Liyane babagan tukang sampah - 1
Ing wulangan iki, kita bakal ngrembug kanthi luwih rinci babagan cara kerjane. Contone, kepiye lan kapan obyek dadi ora perlu? Lan kepiye carane tukang sampah ngerti? Iki minangka pitakonan sing bakal dijawab sajrone pelajaran dina iki :) Pawulangan bakal luwih kaya ringkesan: sampeyan ora perlu sinau materi iki kanthi ati-ati. Tujuane utamane kanggo nggedhekake visi sampeyan babagan cara kerja memori lan tukang sampah, mula maca lan golek sing anyar kanggo sampeyan :) Ayo! Wangsulan: Bab ingkang sapisanan sampeyan kudu elinga iku kolektor uwuh dianggo ing podo karo karo program. Iku dudu bagean saka program sampeyan. Mlaku kanthi kapisah (ing wulangan pungkasan, kita mbandhingake iki karo panyedot vakum robot) Nanging ora mesthi. Pangumpulan sampah biyen ditindakake ing benang sing padha karo program sampeyan. Ing sawetara jadwal (sapisan saben sawetara menit), kolektor sampah bakal mriksa anane obyek sing ora dikarepake ing program kasebut. Masalahe yaiku program kasebut bakal digantung (ora dieksekusi) sajrone mriksa lan koleksi sampah. Mbayangno sampeyan lagi lungguh ing kantor ing karya. Nanging banjur wanita reresik teka kanggo ngumbah jubin. Dheweke ngusir sampeyan saka komputer sajrone 5 menit lan ngenteni nganti rampung ngresiki. Sajrone wektu iki, sampeyan ora bisa kerja. Semono uga cara pengumpulan sampah biyen :) Mekanisme iki banjur diganti, lan saiki tukang sampah mlaku ing latar mburi, ora impeding karya program dhewe. Sampeyan wis ngerti manawa obyek mati nalika ora ana referensi maneh. Ing kasunyatan,tukang sampah ora ngetung referensi obyek . Kaping pisanan, iki bisa njupuk wektu suwe. Kapindho, ora efektif banget. Sawise kabeh, obyek bisa ngrujuk marang saben liyane! Liyane babagan tukang sampah - 2Tokoh kasebut nuduhake conto ing ngendi 3 obyek nuduhake siji liyane, nanging ora ana wong liya sing nuduhake. Ing tembung liya, program liyane ora mbutuhake. Yen kolektor sampah mung ngetung referensi, 3 obyek kasebut ora bakal diklumpukake lan memori ora bakal dibebasake (ana referensi kanggo dheweke!). Kita bisa mbandhingake iki karo pesawat ruang angkasa. Sajrone penerbangan, para astronot mutusake mriksa dhaptar suku cadang sing kasedhiya kanggo ndandani. Antarane liyane, padha nemokake setir lan pedal saka mobil biasa. Temenan, dheweke ora dibutuhake ing kene lan njupuk papan kanthi ora perlu (sanajan rong bagean kasebut ana hubungane lan duwe sawetara fungsi). Nanging ing njero pesawat ruang angkasa, iku sampah sing ora ana gunane sing kudu dibuwang. Mula, ing Jawa, keputusan kanggo ngumpulake sampah ora adhedhasar pangetung referensi,tekan lan ora bisa digayuh . Kepiye carane nemtokake manawa obyek bisa digayuh? Kabeh iku mung akale. Sawijining obyek bisa digayuh yen dirujuk dening obyek liya sing bisa digayuh. Mangkono, kita entuk "chain of reachability". Diwiwiti nalika program diwiwiti lan terus sajrone program kasebut. Katon kaya iki: Liyane babagan tukang sampah - 3 Panah ing gambar nuduhake kode eksekusi program kita. Kode (contone, main()cara) nggawe referensi kanggo obyek. Obyek iki bisa ngrujuk marang obyek liya, obyek kasebut menyang obyek liyane, lan liya-liyane. Iki mbentuk ranté referensi. Yen sampeyan bisa nglacak rantai saka obyek menyang "referensi root" (sing digawe langsung ing kode eksekusi), banjur dianggep bisa diakses. Objek kasebut ditandhani ireng ing gambar. Nanging obyek ora bisa digayuh yen obyek kasebut metu saka rantai iki, yaiku ora ana variabel ing kode sing saiki dieksekusi referensi, lan ora bisa digayuh liwat "rantai referensi". Ing program kita, loro obyek kasebut ditandhani abang. Elinga yen obyek "abang" iki duwe referensi kanggo saben liyane. Nanging kaya sing wis dakkandhakake sadurunge, tukang sampah modern Jawa ora ngetung referensi. Iki nemtokake manawa obyek bisa digayuh utawa ora bisa digayuh. Akibaté, bakal ngrebut ing loro obyek abang ing tokoh. Saiki ayo ndeleng kabeh proses saka wiwitan nganti pungkasan. Kanthi mengkono, kita uga bakal weruh carane memori disusun ing Jawa :) Kabeh obyek Jawa disimpen ing area khusus memori disebut heap . Ing basa saben dinten, tumpukan biasane minangka gunung barang, ing ngendi kabeh dicampur. Ananging dudu kasebat ing Jawa. Struktur kasebut logis banget lan cukup. Ing sawetara titik, programer Java nemokake yen kabeh obyek bisa dipérang dadi rong jinis: obyek prasaja lan "obyek umur dawa". "Obyek sing umure dawa" yaiku obyek sing bisa urip ing pirang-pirang babak pengumpulan sampah. Biasane urip nganti program rampung. Ing pungkasan, tumpukan lengkap, ing ngendi kabeh obyek disimpen, dipérang dadi sawetara bagéan. Pérangan pisanan duwe jeneng ayu: eden(saka Alkitab "Taman Eden"). Jeneng iki pas, amarga ing kene obyek bakal rampung sawise digawe. Iki minangka bagean saka memori ing ngendi obyek anyar digawe nalika kita nggunakake tembung kunci anyar. Akeh obyek bisa digawe. Nalika wilayah iki kehabisan papan, pengumpulan sampah "cepet" wiwitan diwiwiti. Kita kudu ngomong yen tukang sampah iku pinter banget. Iku milih algoritma adhedhasar apa tumpukan wis luwih uwuh utawa liyane obyek urip. Yen meh kabeh obyek sampah, kolektor menehi tandha obyek urip lan pindhah menyang area memori liyane. Banjur wilayah saiki wis rampung dibusak. Yen ora akeh uwuh, lan tumpukan kasebut biasane obyek urip, kolektor menehi tandha sampah, ngresiki, lan ngemas barang liyane. Kita ngomong "papan kaslametan . A papan kaslametané , ing siji, dipérang dadi generasi . Saben obyek belongs kanggo generasi tartamtu, gumantung carane akeh babak saka sampah koleksi wis slamet. Yen obyek wis slamet siji babak saka sampah koleksi, banjur ing "Generasi 1"; yen 5, banjur "Generasi 5". Bebarengan, eden lan ruang kaslametan mbentuk wilayah sing diarani generasi muda . Saliyane generasi enom, tumpukan nduweni area memori liyane sing disebut generasi lawas. Iki sabenere wilayah ngendi obyek long-urip sing wis slamet akeh babak pangumpulan sampah rampung. Ana kaluwihan kanggo njaga kapisah saka kabeh liyane. Koleksi uwuh lengkap dileksanakake mung nalika generasi lawas kebak, IE ana supaya akeh obyek long-urip ing program sing ana ora cukup memori. Proses iki kalebu luwih saka siji area memori. Umumé, kalebu kabeh obyek sing digawe dening mesin Java. Alami, iki mbutuhake wektu lan sumber daya luwih akeh. Iki sabenere kaputusan digawe kanggo nyimpen obyek long-urip dhewe. "Pengumpulan sampah cepet" ditindakake nalika wilayah liyane ora ana papan. Iki kalebu mung siji wilayah, sing ndadekake luwih cepet lan luwih efisien. Pungkasan, sanajan area kanggo obyek sing umur dawa wis diisi, koleksi sampah lengkap micu. Mangkono, kolektor nggunakake alat "paling abot" mung nalika ora bisa nyingkiri. Mangkene representasi visual saka struktur tumpukan lan koleksi sampah: Liyane babagan tukang sampah - 4
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION