আপনার প্রশ্ন ঘুরিয়ে। আসল প্রেরণামূলক প্রশ্নটি কী পরিস্থিতিতে আমরা আবর্জনা সংগ্রহের ব্যয়টি এড়াতে পারি?
ওয়েল, প্রথম বন্ধ, কি হয় আবর্জনা সংগ্রহের খরচ? দুটি প্রধান ব্যয় আছে। প্রথমত, আপনাকে জীবিত কী তা নির্ধারণ করতে হবে ; এর জন্য সম্ভাব্য অনেক কাজ প্রয়োজন। দ্বিতীয়ত, যখন আপনি এমন কিছু মুক্ত করেন যা তখনও বেঁচে থাকা দুটি জিনিসের মধ্যে বরাদ্দ করা হয় তখন আপনাকে তৈরি হওয়া গর্তগুলি সংক্ষিপ্ত করতে হবে। সেই ছিদ্রগুলি অপব্যয়কর। তবে এগুলি সংযোগ করা খুব ব্যয়বহুল।
কীভাবে আমরা এই ব্যয়গুলি এড়াতে পারি?
স্পষ্টতই যদি আপনি কোনও স্টোরেজ ব্যবহারের ধরণটি খুঁজে পান যেখানে আপনি কখনই কোনও দীর্ঘজীবী কিছু বরাদ্দ করেন না , তারপরে স্বল্প-স্থায়ী কিছু বরাদ্দ করেন, তারপরে দীর্ঘস্থায়ী কিছু বরাদ্দ করেন, আপনি গর্তের ব্যয় নির্মূল করতে পারেন। আপনি যদি গ্যারান্টি দিতে পারেন যে আপনার স্টোরেজের কিছু উপসেটের জন্য, প্রতিটি পরবর্তী বরাদ্দ সেই স্টোরেজের আগেরটির তুলনায় স্বল্প-জীবনকালীন হয় তবে সেই স্টোরেজে কোনও গর্ত কখনও হবে না।
তবে আমরা যদি গর্তের সমস্যাটি সমাধান করেছি তবে আমরা আবর্জনা সংগ্রহের সমস্যাটিও সমাধান করেছি । আপনার কাছে সেই স্টোরেজে কিছু আছে যা এখনও বেঁচে আছে? হ্যাঁ। দীর্ঘায়ু হওয়ার আগে কি সবকিছু বরাদ্দ ছিল? হ্যাঁ - এই ধারণাটি হ'ল কীভাবে আমরা গর্তের সম্ভাবনাটি দূর করেছি। সুতরাং আপনাকে যা করতে হবে তা হ'ল "অতি সাম্প্রতিক বরাদ্দটি কি বেঁচে আছে?" এবং আপনি জানেন যে সেই স্টোরেজে সমস্ত কিছু জীবিত।
আমাদের কি স্টোরেজ বরাদ্দের একটি সেট রয়েছে যেখানে আমরা জানি যে পরবর্তী বরাদ্দগুলি পূর্বের বরাদ্দের চেয়ে স্বল্প-স্থায়ী? হ্যাঁ! অ্যাক্টিভেশন ফ্রেমের পদ্ধতিগুলি সর্বদা বিপরীত ক্রমে নষ্ট হয় যা সেগুলি তৈরি করা হয়েছিল কারণ সেগুলি সক্রিয়করণের তুলনায় তারা সর্বদা স্বল্প-জীবিত।
অতএব আমরা স্ট্যাকের উপর অ্যাক্টিভেশন ফ্রেমগুলি সঞ্চয় করতে পারি এবং জানি যে সেগুলি কখনই সংগ্রহ করার দরকার নেই। যদি স্ট্যাকের কোনও ফ্রেম থাকে তবে এর নীচে ফ্রেমের পুরো সেটটি দীর্ঘস্থায়ী হয়, তাই তাদের সংগ্রহ করার দরকার নেই। এবং তারা সৃষ্টি হয়েছিল তার বিপরীতে বিনষ্ট হবে। অ্যাক্টিভেশন ফ্রেমগুলির জন্য এইভাবে আবর্জনা সংগ্রহের ব্যয় নির্মূল করা হয়।
এজন্য আমাদের প্রথম স্থানে স্ট্যাকের উপর অস্থায়ী পুল রয়েছে: কারণ এটি কোনও স্মৃতি পরিচালনার জরিমানা ব্যতীত পদ্ধতি অ্যাক্টিভেশন বাস্তবায়নের একটি সহজ উপায়।
(অবশ্যই অ্যাক্টিভেশন ফ্রেমে রেফারেন্স দ্বারা উল্লেখ করা মেমরি সংগ্রহের ব্যয় এখনও রয়েছে))
এখন একটি নিয়ন্ত্রণ প্রবাহ সিস্টেম বিবেচনা করুন যেখানে সক্রিয়করণের ফ্রেমগুলি অনুমানযোগ্য ক্রমে বিনষ্ট হয় না । স্বল্প-কালীন অ্যাক্টিভেশন দীর্ঘস্থায়ী অ্যাক্টিভেশনকে উত্থাপন করতে পারলে কী ঘটে? আপনি যেমন কল্পনা করতে পারেন, এই বিশ্বে আপনি সক্রিয়তা সংগ্রহের প্রয়োজনটিকে অপ্টিমাইজ করতে স্ট্যাকটি আর ব্যবহার করতে পারবেন না। ক্রিয়াকলাপগুলির সেটটিতে আবার গর্ত থাকতে পারে।
সি # 2.0 এর আকারে এই বৈশিষ্ট্যটি রয়েছে yield return
। ফলন প্রত্যাবর্তন করে এমন একটি পদ্ধতি পরবর্তী সময়ে পুনরায় সক্রিয় হতে চলেছে - পরের বার যা মুভনেেক্সট বলা হয় - এবং যখন ঘটে তখন অনুমানযোগ্য নয়। সুতরাং পুনরাবৃত্তকারী ব্লকের অ্যাক্টিভেশন ফ্রেমের জন্য স্ট্যাকের মধ্যে থাকা তথ্যগুলি পরিবর্তে গাদাতে সংরক্ষণ করা হয়, যেখানে গণক সংগ্রহ করা হলে এটি আবর্জনা সংগ্রহ করা হয়।
একইভাবে, সি # এবং ভিবি'র পরবর্তী সংস্করণগুলিতে আসা "অ্যাসিঙ্ক / অপেক্ষার" বৈশিষ্ট্যটি আপনাকে এমন পদ্ধতি তৈরি করতে অনুমতি দেবে যার পদ্ধতির ক্রিয়া চলাকালীন সুনির্দিষ্ট পয়েন্টগুলিতে সক্রিয়করণগুলি "ফলন" এবং "পুনঃসূচনা" করবে " যেহেতু অ্যাক্টিভেশন ফ্রেমগুলি এখন পূর্বাভাসযোগ্য পদ্ধতিতে তৈরি করা এবং ধ্বংস করা হয় না, তাই স্ট্যাকের মধ্যে যে সমস্ত তথ্য সঞ্চিত ছিল তা সমস্ত স্তূপে সংরক্ষণ করতে হবে।
এটি ইতিহাসের একটি দুর্ঘটনা মাত্র কয়েক দশক ধরে আমরা সিদ্ধান্ত নিতে পেরেছিলাম যে সক্রিয়করণ ফ্রেমগুলির সাথে কঠোরভাবে আদেশিত পদ্ধতিতে তৈরি এবং ধ্বংস হওয়া ভাষাগুলি ফ্যাশনেবল ছিল। যেহেতু আধুনিক ভাষাগুলি ক্রমবর্ধমানভাবে এই সম্পত্তির অভাব রয়েছে, তাই আরও বেশি বেশি ভাষা দেখার প্রত্যাশা করুন যা ময়লা বাদ দিয়ে ময়লা-আবর্জনার স্তূপের উপর ধারাবাহিকতাকে সংশোধন করে।