JavaRush /Blog Jawa /Random-JV /Liyane babagan tukang sampah ing Jawa

Liyane babagan tukang sampah ing Jawa

Diterbitake ing grup
Hello! Ing kuliah pungkasan, pisanan kita kenal karo mekanisme sing dibangun ing basa Jawa - tukang sampah. Makaryakke ing latar mburi nalika program sampeyan lagi mlaku, ngumpulake obyek sing wis ora perlu, sing mengko bakal dibusak. Kanthi cara iki mbebasake memori kanggo nggawe obyek anyar ing mangsa ngarep. Ing kuliah iki kita bakal nliti prinsip operasi kasebut. Contone, carane lan ing titik apa obyek dadi ora perlu? Lan kepiye tukang sampah ngerti babagan iki? Kita bakal mangsuli pitakonan iki :) Kuliah kita luwih ringkesan: materi iki ora perlu diapalake. Iki dimaksudake kanggo nggedhekake wawasan babagan karya memori lan tukang sampah, supaya cukup kanggo maca lan sinau babagan sing anyar :) Ayo! Wangsulan: Bab ingkang pisanan sampeyan kudu elinga iku tukang sampah mlaku ing podo karo karo program Panjenengan . Iku ora bagean lan fungsi kapisah: kanggo njlèntrèhaké iki, ing kuliah pungkasan kita menehi analogi karo robot vacuum cleaner. Nyatane, iki ora mesthi kedadeyan. Sadurunge, kolektor sampah dirancang kanthi cara sing bisa digunakake ing benang sing padha karo program sampeyan. Lan miturut sawetara jadwal, sapisan saben sawetara menit, wiwit mriksa anané obyek sing ora perlu ing program kasebut. Masalahe yaiku nalika mriksa lan koleksi sampah, program kasebut beku lan ora dieksekusi. Bayangna sampeyan lagi lungguh ing kantor kerja. Nanging banjur ana wanita reresik teka lan kudu ngumbah jubin ing kamar. Dheweke nendhang sampeyan metu saka mburi komputer sajrone 5 menit lan sampeyan ngenteni nganti dheweke rampung ngresiki. Sajrone wektu iki sampeyan ora bisa kerja. Iki kira-kira carane tukang sampah digunakake :) Mengko, mekanisme iki diganti, lan saiki tukang sampah bisa digunakake ing latar mburi, tanpa alon-alon kerja program kasebut. Sampeyan wis ngerti manawa obyek mati nalika ora ana referensi sing ditinggalake. Nanging tukang sampah ora ngetung referensi kanggo . Kaping pisanan, bisa uga cukup dawa. Sareh, iku ora banget efektif. Sawise kabeh, obyek bisa ngrujuk marang saben liyane! Liyane babagan tukang sampah - 2Tokoh nuduhake conto ing ngendi 3 obyek ngrujuk saben liyane, nanging ora ana wong liya sing ngrujuk. Tegese, ora dibutuhake supaya program liyane bisa digunakake. Yen tukang sampah mung ngetung referensi, kabeh 3 obyek iki bakal tetep lan ora bakal mbebasake memori: ana referensi kanggo dheweke! Bisa dibandhingake karo pesawat ruang angkasa. Sajrone penerbangan, para astronot mutusake kanggo mriksa dhaptar suku cadang kanggo ndandani lan nemokake ing antarane setir lan pedal saka mobil biasa. Dheweke jelas ora dibutuhake ing kene lan njupuk papan ekstra. Sanajan bagean kasebut disambungake lan duwe sawetara fungsi, ing kerangka operasi pesawat ruang angkasa kasebut minangka sampah sing ora perlu, sing luwih apik kanggo nyingkirake. Mula, Jawa mutusake kanggo nggawe dhasar kanggo nglumpukake sampah ora ngetung referensi, nanging mbagi obyek dadi rong jinis - tekan lan ora bisa diakses.. Kepiye carane nemtokake manawa obyek bisa digayuh? Kabeh akale iku prasaja. Sawijining obyek bisa digayuh yen dirujuk dening obyek liya sing bisa digayuh. Iki nyebabake "chain of reachability". Diwiwiti nalika program diwiwiti lan terus sajrone kabeh operasi. Katon kaya iki: Liyane babagan tukang sampah - 4Panah ing gambar nuduhake kode eksekusi program kita. Ing kode, contone, ing cara utama (), referensi kanggo obyek digawe. Obyek iki bisa ngrujuk menyang obyek anyar, obyek liyane, lan liya-liyane. Rantai pranala obyek dibentuk . Yen obyek bisa digayuh liwat rantai pranala menyang "link root", yaiku, sing digawe langsung ing kode eksekusi, dianggep bisa digayuh. Ing gambar kita dituduhake kanthi warna biru. Nanging yen obyek wis ambruk metu saka chain iki, yaiku, ora ana variabel ing kode sing saiki dieksekusi ngemot referensi kanggo iku, lan iku uga mokal kanggo nggayuh liwat "rantai pranala" - iku dianggep unreachable. Ing program kita, rong obyek kasebut dituduhake kanthi warna abang. Wigati dicathet: obyek "abang" iki duwe pranala menyang siji liyane. Nanging, kaya sing wis dakcritakake sadurunge, tukang sampah modern ing Jawa ora ngetung referensi. Iki nemtokake manawa obyek bisa digayuh utawa ora bisa digayuh . Mula, rong obyek abang ing gambar kasebut bakal dadi mangsane. Saiki ayo ndeleng kabeh proses saka wiwitan nganti rampung, lan ing wektu sing padha ayo ndeleng cara kerja memori ing Jawa :) Kabeh obyek ing Jawa disimpen ing area memori khusus sing diarani heap . Ing basa biasa, "tumpukan" minangka gunung obyek sing kabeh ana ing jumble. Nanging tumpukan ing Jawa ora kaya ngono. Wis struktur banget logis lan cukup. Ing sawijining dina, programer Jawa nemokake yen kabeh obyek ing program kasebut bisa dipérang dadi rong jinis - obyek sing relatif, prasaja lan obyek "umur dawa" . Obyek "urip dawa" yaiku sing wis slamet akeh koleksi sampah. Paling asring bakal ana nganti pungkasan program. Akibaté, tumpukan umum, ing ngendi kabeh obyek sing digawe disimpen, dipérang dadi sawetara bagéan. Pérangan pisanan wis jeneng ayu - Eden (Alkitab "Taman Eden"). Iki minangka jeneng sing apik amarga ing kene obyek bakal ditindakake sawise digawe. Ing bagean iki memori diparengake kanggo obyek anyar nalika kita nulisnew. Akeh obyek bisa digawe, lan nalika spasi entek ing wilayah iki, pisanan, "cepet" koleksi sampah wiwit. Sampeyan kudu ngomong yen kolektor sampah banget pinter lan milih algoritma kerja gumantung saka apa sing ana ing tumpukan - sampah utawa obyek kerja. Yen meh kabeh obyek uwuh, Penagih tandha "urip" obyek lan pindhah menyang wilayah memori liyane, sawise kang wilayah saiki wis rampung di resiki munggah. Yen ana sampah cilik lan akeh sing dikuwasani obyek urip, menehi tandha sampah, ngresiki, lan nata barang sing isih ana. We ngandika "penagih tandha obyek" urip "lan pindhah menyang lokasi memori liyane,"Nanging kang? Area memori ing ngendi kabeh obyek sing bisa urip paling ora siji koleksi sampah ditransfer diarani Survival Space . Survival Space, ing siji, dipérang dadi generasi . Saben obyek diwenehi generasi adhedhasar jumlah koleksi sampah sing wis dialami. Yen ana siji, iku belongs kanggo "Generasi 1", yen 5 - kanggo "Generasi 5". Bebarengan, Eden lan Survival Space mbentuk wilayah sing diarani Generasi Muda . Saliyane Generasi Muda, ana area memori liyane ing tumpukan - Generasi Lawas ("generasi lawas"). Iki minangka obyek sing umure dawa banget sing wis slamet saka akeh koleksi sampah. Luwih nguntungake kanggo nyimpen kanthi kapisah saka kabeh liyane. Lan mung nalika wilayah Generasi Lawas kebak, i.e. Malah ana akeh obyek sing dawa banget ing program sing ora ana memori sing cukup, koleksi sampah lengkap ditindakake. Ngolah ora mung siji area memori, nanging umume kabeh obyek sing digawe dening mesin Java. Alami, mbutuhake wektu lan sumber daya luwih akeh. Mulane diputusake kanggo nyimpen obyek sing umure dawa kanthi kapisah. Nalika papan entek ing wilayah liyane, sing diarani "pengumpulan sampah kanthi cepet" ditindakake. Iki kalebu mung siji wilayah, lan amarga iki luwih ekonomis lan luwih cepet. Ing pungkasan, sanajan wilayah kanggo centenarians wis clogged, reresik lengkap lumebu ing fray. Mangkono, alat sing paling "abot" digunakake dening assembler mung nalika ora perlu maneh. Secara skematis, struktur tumpukan lan reresik katon kaya iki: Liyane babagan tukang sampah - 5
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION