JavaRush /Блоги Java /Random-TG /Бештар дар бораи ҷамъоварии ахлот дар Java

Бештар дар бораи ҷамъоварии ахлот дар Java

Дар гурӯҳ нашр шудааст
Салом! Дар лекцияи охирин мо бори аввал бо механизми дарунсохташудаи забони Java — чамъоварии партов шинос шудем. Он ҳангоми кор кардани барномаи шумо дар замина кор мекунад ва an objectҳои нодаркорро ҷамъ мекунад, ки баъдтар нест карда мешаванд. Бо ин роҳ он хотираро барои сохтани an objectҳои нав дар оянда озод мекунад. Дар ин лекция мо принципи кори онро муфассал дида мебароем. Масалан, чи тавр ва дар кадом маврид ашё нодаркор мешавад? Ва ахлотчин дар ин бора аз кучо хабар дорад? Мо ба ин саволхо чавоб медихем :) Лекцияи мо бештар мухтасар аст: ин материалро аз ёд кардан лозим нест. Он барои васеъ кардани уфуқҳои шумо дар бораи кори хотира ва ҷамъоварии ахлот пешбинӣ шудааст, аз ин рӯ хондан ва барои худ чизи нав омӯхтан кофӣ хоҳад буд :) Биёед! Аввалин чизе, ки шумо бояд дар хотир доред, ин аст, ки коллектори партовҳо дар баробари барномаи шумо кор мекунад . Он ҷузъи он нест ва алоҳида фаъолият мекунад: барои тавсифи ин, дар лексияи охирин мо бо робот чангкашак қиёс кардем. Дар асл, ин на ҳама вақт чунин буд. Пештар, коллектори партовҳо тавре тарҳрезӣ шуда буд, ки он дар ҳамон риштае, ки барномаи шумо кор мекунад, кор мекард. Ва мувофиқи баъзе ҷадвал, он дар ҳар чанд дақиқа як маротиба тафтиши мавҷудияти an objectҳои нодаркорро дар барнома оғоз кард. Гап дар сари он буд, ки дар рафти ин тафтиш ва чамъоварии ахлот барнома ях карда монд ва ичро нашуд. Тасаввур кунед, ки шумо дар офис нишаста кор мекунед. Аммо баъд зани фаррош меояд ва бояд фаршҳои ҳуҷраро бишӯяд. Вай шуморо аз паси компютер ба муддати 5 дақиқа берун мекунад ва шумо мунтазир мешавед, ки вай тозакуниро анҷом медиҳад. Дар ин муддат шумо кор карда наметавонед. Хошоктайёркунй тахминан хамин тавр кор мекарданд:) Баъдтар ин механизм дигар шуд ва акнун хошоктайёркунй кори худи программаро суст накарда, дар паси замин кор мекунад. Шумо аллакай медонед, ки an object вақте мемирад, ки ягон истинод ба он боқӣ намондааст. Аммо коллектори ахлот аслан истинодҳоро ба . Аввалан, он метавонад хеле дароз бошад. Дуюм, он чандон самаранок нест. Баъд аз ҳама, an objectҳо метавонанд ба ҳамдигар муроҷиат кунанд! Бештар дар бораи партовгоҳ - 2Дар расм мисол оварда шудааст, ки дар он 3 an object ба ҳамдигар муроҷиат мекунанд, аммо ҳеҷ каси дигар ба онҳо муроҷиат намекунад. Яъне, барои кор кардани қисми боқимондаи барнома онҳо лозим нестанд. Агар ҷамъкунандаи ахлот танҳо истинодҳоро ҳисоб мекард, ҳамаи ин 3 an object боқӣ мемонд ва хотираро холӣ намекарданд: ба онҳо истинодҳо мавҷуданд! Онро ба киштии фалакпаймо монанд кардан мумкин аст. Дар вакти парвоз кайхоннавардон карор доданд, ки руйхати киемхои эхтиётии таъмирро санчида, аз байни онхо руль ва педалхои машинаи оддиро ёфтанд. Онҳо ба таври возеҳ дар ин ҷо лозим нестанд ва фазои иловагӣ ишғол мекунанд. Гарчанде ки ин кисмхо ба хам пайвастанд ва баъзе вазифахоро доранд, дар доираи кори киштии кайхонй партовхои нодаркоранд, ки аз он халос шудан бехтар аст. Аз ин рӯ, Java тасмим гирифт, ки барои ҷамъоварии партовҳо на бо назардошти истинодҳо, балки an objectҳоро ба ду намуд тақсим кунад - дастрас ва дастнорас.. Чӣ тавр муайян кардан мумкин аст, ки оё an object дастрас аст? Ҳама чизи оқилона оддӣ аст. Объект дастрас аст, агар ба он an objectи дигари дастрас истинод карда шавад. Ин ба «занҷири дастрасӣ» оварда мерасонад. Он вақте оғоз мешавад, ки барнома оғоз меёбад ва дар тамоми давраи фаъолияташ идома меёбад. Чунин ба назар мерасад: Бештар дар бораи партовгоҳ - 4Тир дар расм рамзи иҷрокунандаи барномаи моро нишон медиҳад. Дар code, масалан, дар усули main() истинод ба an objectҳо сохта мешавад. Ин an objectҳо метавонанд ба an objectҳои нав, an objectҳо ба баъзеи дигар ва ғайра муроҷиат кунанд. Занҷираи пайвандҳои an objectӣ ташкил карда мешавад . Агар ба an object тавассути ин силсилаи истинодҳо ба “пайванди решавӣ”, яъне an objectе, ки мустақиман дар codeи иҷрокунанда сохта шудааст, дастрас шавад, он дастрас ҳисобида мешавад. Дар расми мо онҳо бо ранги кабуд нишон дода шудаанд. Аммо агар an object аз ин занҷир афтода бошад, яъне ҳеҷ як аз тағирёбандаҳои codeи иҷрошаванда истинод ба он надошта бошад ва тавассути "занҷири пайвандҳо" ба он расидан низ ғайриимкон аст - он дастнорас ҳисобида мешавад. Дар барномаи мо ду чунин an object бо ранги сурх нишон дода шудааст. Лутфан таваҷҷӯҳ намоед: ин an objectҳои "сурх" ба ҳамдигар пайванд доранд. Аммо, тавре ки мо қаблан гуфта будем, коллектори ҳозиразамони партов дар Java ҳисобкунии истинодҳоро иҷро намекунад. Он муайян мекунад , ки оё an object дастрас аст ё дастнорас . Аз ин рӯ, ду ашёи сурх дар расм тӯъмаи ӯ мешаванд. Акнун биёед тамоми равандро аз аввал то ба охир дида бароем ва ҳамзамон бубинем, ки хотира дар Java чӣ гуна кор мекунад :) Ҳама an objectҳо дар Java дар минтақаи махсуси хотира бо номи heap нигоҳ дошта мешаванд . Ба забони оддӣ, "теппа" як кӯҳи ашёест, ки дар он ҳама чиз дар гирду атроф хобида аст. Аммо теппа дар Java ин тавр нест. Он сохтори хеле мантиқӣ ва оқилона дорад. Як рӯзи хуб, барномасозони Java дарёфтанд, ки ҳама an objectҳои барномаҳои онҳо метавонанд ба ду намуд тақсим шаванд - an objectҳои нисбатан содда , an objectҳои "дарозумр" . Объектхои «умри дарозумр» онхое мебошанд, ки аз бисьёр чамъоварии партовхо зинда мондаанд. Аксар вақт онҳо то охири барнома вуҷуд доранд. Дар натиҷа, теппаи умумӣ, ки дар он ҳама an objectҳои офаридашуда нигоҳ дошта мешаванд, ба якчанд қисмҳо тақсим карда шуданд. Қисми аввал номи зебо дорад - Адан (библиявии "Боғи Адан"). Ин номи олиҷаноб аст, зеро дар ин ҷо an objectҳо пас аз офарида шуданашон мераванд. Маҳз дар ҳамин қисм ҳангоми навиштани мо хотира барои an objectҳои нав ҷудо карда мешавадnew. Объектхои зиёдеро ба вучуд овардан мумкин аст ва вакте ки дар ин майдон чой тамом мешавад, чамъоварии аввалин «тез» партов огоз меёбад. Бояд гуфт, ки ҷамъкунандаи ахлот хеле оқил аст ва алгоритми корро вобаста аз он ки дар тӯда бештар аст - партов ё ашёи корӣ интихоб мекунад. Агар кариб хамаи an objectхо партов бошанд, коллектор an objectхои «зинда»-ро кайд карда, онхоро ба майдони дигари хотира ме-гузаронад, ки баъди он майдони хозира пурра тоза карда мешавад. Агар хошок кам бошад ва кисми зиёди онро ашёи зинда ишгол карда бошад, он ахлотро нишон медихад, онро тоза мекунад ва an objectхои бокимондаро ба тартиб медарорад. Мо гуфтем, ки «коллектор an objectҳои «зинда»-ро қайд мекунад ва онҳоро ба ҷои дигари хотира интиқол медиҳад», аммо кадоме аз онҳо? Минтақаи хотирае, ки дар он ҳама an objectҳое, ки ҳадди аққал як ҷамъоварии ахлотро наҷот медиҳанд, интиқол дода мешаванд Фазои наҷот номида мешавад . Фазои зиндамонӣ, дар навбати худ, ба наслҳо тақсим карда мешавад . Ба ҳар як an object як насл вобаста аз он ки чӣ қадар ҷамъоварии партовҳо аз сар гузаронидааст, таъин карда мешавад. Агар вуҷуд дошта бошад, он ба "Насли 1" тааллуқ дорад, агар 5 бошад - ба "Насли 5". Якҷоя, Aden ва Space Survival минтақаеро ташкил медиҳанд, ки насли ҷавон номида мешавад . Ба ғайр аз Насли ҷавон, дар теппа боз як минтақаи хотира мавҷуд аст - Насли кӯҳна («насли кӯҳна»). Инҳо an objectҳои хеле дарозумр мебошанд, ки аз бисёр коллексияи партовҳо наҷот ёфтаанд. Аз хамаи дигархо чудо нигох доштан фоиданоктар аст. Ва танҳо вақте ки майдони Насли кӯҳна пур аст, яъне. Ҳатто дар барнома он қадар an objectҳои дарозмуддат вуҷуд доранд, ки хотираи кофӣ нест, ҷамъоварии пурраи партов анҷом дода мешавад. Он на танҳо як минтақаи хотира, балки умуман ҳамаи an objectҳои аз ҷониби мошини Java сохташуда коркард мешавад. Табиист, ки барои ин хеле бештар вақт ва захираҳо лозим аст. Махз барои хамин карор дода шуд, ки an objectхои дарозумр алохида нигох дошта шаванд. Вакте ки дар дигар районхо чой тамом мешавад, ба ном «чамъоварии босуръати хошок» гузаронда мешавад. Факат як майдонро дарбар мегирад ва аз ин ру сарфакоронатар ва тезтар аст. Дар ниҳоят, вақте ки ҳатто майдони садсолаҳо аллакай баста шудааст, тозакунии пурра ба мубориза ворид мешавад. Хамин тавр, асбоби «вазнинтарин»-ро монтажчй танхо дар мавриде истифода мебарад, ки он дигар зарур нест. Схематикӣ, сохтори теппа ва тозакунӣ чунин аст: Бештар дар бораи партовгоҳ - 5
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION