JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ ڪچرو ڪليڪٽر بابت وڌيڪ

جاوا ۾ ڪچرو ڪليڪٽر بابت وڌيڪ

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