CodeGym /جاوا بلاگ /Random-SD /ڪچرو گڏ ڪندڙ بابت وڌيڪ اصطلاح
John Squirrels
سطح
San Francisco

ڪچرو گڏ ڪندڙ بابت وڌيڪ اصطلاح

گروپ ۾ شايع ٿيل
سلام پوئين سبق ۾، اسان پهريون ڀيرو جاوا جي ٺاهيل گاربيج ڪليڪٽر سان واقف ٿياسين ۽ ان جي ڪم ڪرڻ جي باري ۾ ڪو معمولي خيال حاصل ڪيو. اهو پس منظر ۾ ڪم ڪري ٿو جڏهن توهان جو پروگرام هلي رهيو آهي، غير ضروري شيون گڏ ڪندي جيڪي بعد ۾ ڊهي وينديون. ان ڪري، اهو ميموري کي آزاد ڪري ٿو جيڪو مستقبل ۾ نئين شيون ٺاهڻ لاء استعمال ڪري سگهجي ٿو.
ڪچرو گڏ ڪندڙ بابت وڌيڪ - 1
هن سبق ۾، اسان وڌيڪ تفصيل سان بحث ڪنداسين ته اهو ڪيئن ڪم ڪري ٿو. مثال طور، هڪ شئي ڪيئن ۽ ڪڏهن غير ضروري ٿي ويندي آهي؟ ۽ ڪچرو گڏ ڪندڙ کي ڪيئن معلوم ٿيندو؟ اهي سوال آهن جن جا جواب اسين اڄ جي سبق ۾ ڏينداسين :) سبق وڌيڪ هڪ جائزو وانگر هوندو: توهان کي هن مواد کي دل سان سکڻ جي ضرورت ناهي. ارادو بنيادي طور تي توهان جي نظر کي وڌائڻ جو آهي ته ڪيئن ياداشت ۽ ڪچرو گڏ ڪندڙ ڪم ڪن ٿا، تنهنڪري صرف پڙهو ۽ پنهنجي لاءِ ڪجهه نئون ڳولهيو :) اچو ته هلون! پهرين شيء جيڪا توهان کي ياد رکڻ جي ضرورت آهي اها آهي ته ڪچرو ڪليڪٽر توهان جي پروگرام سان متوازي ۾ ڪم ڪري ٿو . اهو توهان جي پروگرام جو حصو ناهي. اهو الڳ الڳ هلندو آهي (آخري سبق ۾، اسان هن کي روبوٽ ويڪيوم ڪلينر سان ڀيٽيو) پر اهو هميشه ائين نه هو. ڪچرو گڏ ڪرڻ جو ڪم ان ئي سلسلي ۾ ڪيو ويندو هو جيئن توهان جو پروگرام. ڪجهه شيڊول تي (هڪ ڀيرو هر چند منٽن ۾)، ڪچرو ڪليڪٽر پروگرام ۾ ناپسنديده شين جي موجودگي جي جانچ ڪندو. مسئلو اهو هو ته پروگرام هن چيڪ ۽ ڪچري جي گڏ ڪرڻ دوران لڪي ويندو (عمل نه ڪيو). تصور ڪريو ته توهان ڪم تي پنهنجي آفيس ۾ ويٺا آهيو. پر پوءِ صفائي ڪندڙ عورت فرش ڌوئڻ لاءِ اندر اچي ٿي. هوءَ توهان کي 5 منٽن لاءِ توهان جي ڪمپيوٽر کان پري ڪري ٿي ۽ توهان انتظار ڪريو جيستائين هن جي صفائي مڪمل نه ٿئي. هن عرصي دوران، توهان ڪم ڪرڻ جي قابل نه آهيو. اهو آهي ته ڪچرو گڏ ڪرڻ جو ڪم ڪيئن ٿيندو هو :) اهو ميکانيزم بعد ۾ تبديل ڪيو ويو، ۽ هاڻي ڪچرو گڏ ڪرڻ وارو پس منظر ۾ هلندو آهي، پروگرام جي ڪم کي روڪيو نه. توهان اڳ ۾ ئي ڄاڻو ٿا ته هڪ اعتراض مري ويندو آهي جڏهن ان کي وڌيڪ حوالو نه آهي. حقيقت ۾، ڪچرو ڪليڪٽر اعتراض جي حوالن کي شمار نٿو ڪري . پهرين، اهو هڪ ڊگهو وقت وٺي سگھي ٿو. ٻيو، اهو تمام مؤثر نه آهي. سڀ کان پوء، شيون هڪ ٻئي ڏانهن اشارو ڪري سگهن ٿا! ڪچري جي ڪليڪٽر بابت وڌيڪ - 2انگ اکر هڪ مثال ڏيکاري ٿو جتي 3 شيون هڪ ٻئي ڏانهن اشارو ڪن ٿا، پر ٻيو ڪو به انهن ڏانهن اشارو نه آهي. ٻين لفظن ۾، باقي پروگرام انهن جي ضرورت ناهي. جيڪڏهن ڪچرو ڪليڪٽر صرف حوالن کي ڳڻيو، اهي 3 شيون گڏ نه ٿينديون ۽ ياداشت آزاد نه ٿيندي (انهن جا حوالا آهن!). اسان ان جو مقابلو خلائي جهاز سان ڪري سگهون ٿا. اڏام دوران، خلاباز مرمت لاءِ موجود اسپيئر پارٽس جي لسٽ چيڪ ڪرڻ جو فيصلو ڪن ٿا. ٻين شين مان، اهي هڪ عام ڪار مان هڪ اسٽيئرنگ ڦيٿي ۽ pedals لھندين. ظاهر آهي، اهي هتي گهربل نه آهن ۽ غير ضروري طور تي جاء وٺي رهيا آهن (جيتوڻيڪ اهي ٻه حصا هڪ ٻئي سان لاڳاپيل آهن ۽ ڪجهه ڪم آهن). پر خلائي جهاز جي اندر، اهي بيڪار ڪچرو آهن جن کي رد ڪيو وڃي. ان جي مطابق، جاوا ۾، رديف کي گڏ ڪرڻ جو فيصلو ڪيو ويو ريفرنس جي ڳڻپ جي بنياد تي، پر شين کي ٻن قسمن ۾ الڳ ڪرڻ جي بنياد تي: پهچ ۽ ناقابل رسائي .. اسان ڪيئن اندازو لڳائي سگهون ٿا ته هڪ شئي پهچي سگهي ٿي؟ اهو سڀ صرف ingenious آهي. هڪ شئي پهچ جي قابل آهي جيڪڏهن اها ٻي پهچ واري شئي جي حوالي ڪئي وڃي. اهڙيء طرح، اسان کي "رسائي جو سلسلو" ملي ٿو. اهو شروع ٿئي ٿو جڏهن پروگرام شروع ٿئي ٿو ۽ پروگرام جي مدت تائين جاري رهي ٿو. اهو ڪجهه هن طرح ڏسڻ ۾ اچي ٿو: ڪچري جي ڪليڪٽر بابت وڌيڪ - 3 شڪل ۾ تير اسان جي پروگرام جي قابل عمل ڪوڊ کي اشارو ڪري ٿو. ڪوڊ (مثال طور، main()طريقو) شين جي حوالي سان ٺاهي ٿو. اهي شيون ٻين شين ڏانهن اشارو ڪري سگهن ٿيون، اهي شيون اڃا تائين ٻين ڏانهن، وغيره. هي هڪ حوالو سلسلو ٺاهي ٿو . جيڪڏهن توهان ڪنهن شئي کان ”روٽ ريفرنس“ (جيڪو سڌي طرح ايگزيڪيوٽيبل ڪوڊ ۾ ٺاهيل) تائين زنجير سان گڏ ڳولي سگهو ٿا، پوءِ ان کي رسي سگھجي ٿو. اهڙيون شيون تصوير ۾ ڪارو نشان لڳل آهن. پر ڪا شئي ان جي قابل نه آهي جيڪڏهن شئي هن زنجير مان نڪري وڃي، يعني هن وقت جاري ڪيل ڪوڊ ۾ موجود ڪو به متغير ان جو حوالو نٿو ڏئي، ۽ اهو "ريفرنس چين" ذريعي پهچي نٿو سگهي. اسان جي پروگرام ۾، ٻه اهڙيون شيون ڳاڙهي نشان لڳل آهن. نوٽ ڪريو ته اهي "لال" شيون هڪ ٻئي ڏانهن حوالا آهن. پر جيئن اسان اڳ ۾ چيو آهي، جاوا جو جديد گند ڪچرو ڪليڪٽر حوالن کي شمار نٿو ڪري. اهو طئي ڪري ٿو ته هڪ شئي پهچ جي قابل آهي يا ناقابل رسائي . نتيجي طور، اهو شڪل ۾ ٻن ڳاڙهي شين تي قبضو ڪندو. هاڻي اچو ته سڄي عمل کي شروع کان آخر تائين ڏسو. ائين ڪرڻ سان، اسان اهو به ڏسنداسين ته جاوا ۾ ميموري کي ڪيئن ترتيب ڏني وئي آهي :) جاوا جا سڀ شيون ميموري جي هڪ خاص حصي ۾ محفوظ ڪيون وينديون آهن جنهن کي هيپ چيو ويندو آهي . روزمره جي ٻولي ۾، هڪ ڍير عام طور تي شين جو هڪ جبل آهي، جتي هر شيء گڏ ٿيل آهي. پر اهو نه آهي ته جاوا ۾ هيپ ڇا آهي. ان جي جوڙجڪ تمام منطقي ۽ معقول آهي. ڪجهه نقطي تي، جاوا پروگرامرز ڏٺائين ته انهن جون سڀئي شيون ٻن قسمن ۾ ورهائي سگهجن ٿيون: سادي شيون ۽ "ڊگهي رهندڙ شيون" . ”ڊگهي رهجي ويل شيون“ اهي شيون آهن جيڪي ڪچرو گڏ ڪرڻ جي ڪيترن ئي دورن کان بچي ويون آهن. اهي عام طور تي پروگرام ختم ٿيڻ تائين رهن ٿا. آخر ۾، مڪمل ڍير، جتي سڀئي شيون ذخيرو ٿيل آهن، ڪيترن ئي حصن ۾ ورهايل هئي. پهرين حصي جو هڪ خوبصورت نالو آهي: ايڊن(بائبل جي "باغ عدن" مان). هي نالو مناسب آهي، ڇاڪاڻ ته هي اهو آهي جتي شيون ختم ٿيڻ کان پوء انهن جي پيدا ٿيڻ کان پوء. هي ميموري جو حصو آهي جتي نيون شيون ٺاهي وينديون آهن جڏهن اسان لفظ نئون استعمال ڪندا آهيون. ڪيتريون ئي شيون ٺاهي سگهجن ٿيون. جڏهن هي علائقو خلا کان ٻاهر هلندو آهي، هڪ ابتدائي "تيز" ڪچرو گڏ ڪرڻ شروع ٿئي ٿو. اسان کي اهو چوڻ گهرجي ته ڪچرو گڏ ڪندڙ تمام هوشيار آهي. اهو هڪ الگورٿم جي بنياد تي چونڊيندو آهي ته ڇا ڍير ۾ وڌيڪ گندگي آهي يا وڌيڪ زنده شيون. جيڪڏهن لڳ ڀڳ سڀئي شيون گندگي آهن، ڪليڪٽر زنده شين کي نشانو بڻائيندو آهي ۽ انهن کي ياداشت جي ڪنهن ٻئي علائقي ڏانهن منتقل ڪري ٿو. ان کان پوء موجوده علائقو مڪمل طور تي صاف ڪيو ويو آهي. جيڪڏهن ڪچرو گهڻو نه آهي، ۽ ڍير گهڻو ڪري زنده شين جو آهي، ڪليڪٽر ڪچري کي نشانو بڻائي، ان کي صاف ڪري ٿو، ۽ ٻين شين کي گڏ ڪري ٿو. اسان چيو ته "ڪليڪٽر زنده شين کي نشانو بڻائيندو آهي ۽ انهن کي ياداشت جي ڪنهن ٻئي علائقي ڏانهن منتقل ڪري ٿو"، پر ڪٿي؟ يادگيري جو هڪ علائقو جتي سڀئي شيون جيڪي بچيل هونديون آهن گهٽ ۾ گهٽ هڪ گول ڪچري جي گڏ ڪرڻ جي منتقلي کي بقا جي جاء سڏيو ويندو آهي . هڪ بقا جي جاء ، موڙ ۾، نسلن ۾ ورهايل آهي . هر شئي هڪ خاص نسل سان تعلق رکي ٿي، ان تي منحصر آهي ته ڪچرو گڏ ڪرڻ جا ڪيترا دور بچيا آهن. جيڪڏهن ڪا شئي ڪچرو گڏ ڪرڻ جي هڪ دور ۾ بچي وئي آهي، ته پوءِ اها ”جنريشن 1“ ۾ آهي. جيڪڏهن 5، پوء "نسل 5". گڏو گڏ، عدن ۽ بقا جي جاء هڪ علائقو ٺاهيندي آهي جنهن کي نوجوان نسل سڏيو ويندو آهي . نوجوان نسل کان علاوه، هيپ ۾ يادگيري جو هڪ ٻيو علائقو آهي جنهن کي پراڻي نسل سڏيو ويندو آهي . اھو ئي اھو علائقو آھي جتي ڊگھي رھندڙ شيون جيڪي ڪچرو گڏ ڪرڻ جي ڪيترن ئي دورن کان بچي رھيون آھن ختم ٿي وڃن ٿيون. انهن کي ٻين سڀني کان الڳ رکڻ جا فائدا آهن. مڪمل ڪچرو گڏ ڪرڻ صرف تڏهن ئي ڪيو ويندو آهي جڏهن پراڻي نسل مڪمل هجي، يعني پروگرام ۾ ايتريون ڊگهيون شيون هونديون آهن جو ڪافي ياداشت نه هوندي آهي. اهو عمل ياداشت جي هڪ کان وڌيڪ علائقي ۾ شامل آهي. عام طور تي، ان ۾ جاوا مشين پاران ٺاهيل سڀئي شيون شامل آهن. قدرتي طور، اهو تمام گهڻو وقت ۽ وسيلن وٺندو آهي. اهو خاص طور تي اهو فيصلو ڪيو ويو آهي ته ڊگھي زندگي جي شين کي الڳ الڳ ذخيرو ڪرڻ لاء. "جلدي ڪچرو گڏ ڪرڻ" ڪيو ويندو آهي جڏهن ٻيا علائقا خلا کان ٻاهر هلندا آهن. ھن ۾ صرف ھڪڙو علائقو شامل آھي، جيڪو ان کي تيز ۽ وڌيڪ موثر بڻائي ٿو. آخرڪار، جڏهن ايستائين ڊگھي زندگين شين لاءِ علائقو مڪمل طور تي ڀرجي ويندو آهي، مڪمل ڪچرو گڏ ڪرڻ شروع ڪيو ويندو آهي. اهڙيء طرح، ڪليڪٽر "سڀ کان ڳري" اوزار استعمال ڪري ٿو جڏهن ان کان بچڻ ناممڪن آهي. هيپ جي جوڙجڪ ۽ ڪچري جي گڏ ڪرڻ جي هڪ بصري نمائندگي هتي آهي: ڪچري جي ڪليڪٽر بابت وڌيڪ - 4
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION