কীভাবে আবর্জনা সংগ্রহকারীরা স্ট্যাকের ওভারফ্লো এড়াতে পারে?


23

সুতরাং আমি কীভাবে আবর্জনা সংগ্রহকারীরা কাজ করে সে সম্পর্কে ভাবছিলাম এবং আমি একটি আকর্ষণীয় বিষয়টি ভেবেছিলাম। সম্ভবত আবর্জনা সংগ্রহকারীদের সমস্ত কাঠামো একইভাবে অতিক্রম করতে হবে। তারা আবহাওয়া সম্পর্কে জানতে পারে না যে তারা কোনও লিঙ্কযুক্ত তালিকা বা ভারসাম্য গাছ বা যে কোনও কিছুই সন্ধান করছে। তারা তাদের অনুসন্ধানে খুব বেশি স্মৃতি ব্যবহার করতে পারে না। একটি সম্ভাব্য উপায় এবং কেবলমাত্র সমস্ত কাঠামোকে অতিক্রম করার জন্যই আমি ভাবতে পারি, কেবল আপনি সমস্ত বাইনারি গাছের মতোই পুনরাবৃত্তভাবে সমস্তগুলি অতিক্রম করতে পারেন। এটি তবে কোনও লিঙ্কযুক্ত তালিকায় বা কেবলমাত্র একটি দুর্বল সুষম বাইনারি গাছের স্ট্যাককে উপচে ফেলবে। তবে আমি যে সমস্ত আবর্জনা সংগ্রহ করেছি সেগুলি যে ভাষা আমি কখনও ব্যবহার করেছি সেগুলির ক্ষেত্রে এই জাতীয় সমস্যাগুলির কোনও সমস্যা নেই বলে মনে হয়।

ড্রাগনের বইতে এটি "ধরণবিহীন" প্রকারের সারি ব্যবহার করে। মূলত কাঠামোগুলিকে অবিচ্ছিন্নভাবে অতিক্রম করার পরিবর্তে এটি এমন জিনিসগুলি যুক্ত করে যা খুব বেশি একটি সারি হিসাবে চিহ্নিত করা দরকার এবং তারপরে প্রতিটি জিনিস শেষে এটি চিহ্নিত করা হয় না। কিন্তু এই কিউ খুব বড় হবে না?

সুতরাং, আবর্জনা সংগ্রহকারীরা স্বেচ্ছাসেবী কাঠামোকে কীভাবে অতিক্রম করবেন? এই ট্র্যাভারসাল কৌশল কীভাবে ওভারফ্লো এড়াতে পারে?


1
জিসি সমস্ত কাঠামো কম-বেশি একইভাবে অতিক্রম করে তবে কেবল খুব বিমূর্ত অর্থে (উত্তর দেখুন)। তারা যেভাবে বিষয়টিকে দৃ concrete়ভাবে ট্র্যাক রাখে তা পাঠ্যপুস্তকে আপনি যে প্রাথমিক উপস্থাপনাগুলি খুঁজে পেতে পারেন তার চেয়ে অনেক বেশি পরিশীলিত। এবং তারা পুনরাবৃত্তি ব্যবহার করে না। তদতিরিক্ত, ভার্চুয়াল মেমরি সহ, খারাপ বাস্তবায়নগুলি জিসি ধীরগতির হিসাবে দেখা যায়, মেমরির ওভারফ্লো হিসাবে খুব কমই দেখা যায়।
বাবু 0

আপনি ট্রেসিংয়ের জন্য প্রয়োজনীয় স্থানটি নিয়ে চিন্তিত। তবে সম্ভাব্য পুনরুদ্ধারযোগ্য স্মৃতি থেকে যে স্মৃতি সনাক্ত করা হয়েছে এবং ব্যবহৃত হতে পারে তা স্মরণে আলাদা করার জন্য প্রয়োজনীয় স্থান বা কাঠামোগুলি সম্পর্কে। এটির একটি উল্লেখযোগ্য মেমরির ব্যয় হতে পারে, সম্ভবত গাদা আকারের সাথে আনুপাতিক।
বাবু

আমি অনুভব করেছি যে এটি 16 বা তার বেশি বাইটের চেয়ে বড় অবজেক্টের আকারে একটি বিটভেক্টর দিয়ে করা হবে যাতে ওভার হেড সর্বনিম্নে 1000 গুণ কম হয়।
জেক

এটি করার অনেকগুলি উপায় রয়েছে (উত্তর দেখুন), এবং সেগুলি ট্রেসিংয়ের জন্যও ব্যবহার করা যেতে পারে, যা আপনার প্রশ্নের উত্তর দেয় (বিটভেক্টর বা বিটম্যাপগুলি ট্রেসিংয়ের জন্য ব্যবহার করা যেতে পারে, বরং আপনি যে স্ট্যাক বা সারির পরামর্শ দিয়েছিলেন)। আপনি সমস্ত বস্তু বড় বলে ধরে নিতে পারবেন না, যদি না আপনি ছোট ছোট বস্তুগুলিতে স্থান নষ্ট করার পরিকল্পনা করেন, যার মধ্যে অনেকগুলি থাকতে পারে এবং তারপরে আপনার স্থানের জন্য চিন্তা করা উচিত নয়। আপনি যদি ভার্চুয়াল মেমোরিতে থাকেন তবে জায়গাগুলি প্রায়শই একটি সমস্যা খুব কম থাকে এবং সমস্যাগুলি খুব আলাদা।
বাবু

উত্তর:


13

মনে রাখবেন যে আমি কোনও আবর্জনা সংগ্রহের বিশেষজ্ঞ নই। এই উত্তরটি কেবল কৌশলগুলির উদাহরণ দেয়। আমি দাবি করি না যে এটি আবর্জনা সংগ্রহের কৌশলগুলির একটি প্রতিনিধি ওভারভিউ।

একটি স্ক্যানবিহীন সারি একটি সাধারণ পছন্দ। সারিটি বৃহত্তর - গভীরতম ডেটা কাঠামোর মতো সম্ভাব্য হিসাবে বৃহত্তর পেতে পারে। সারিটি সাধারণত স্পষ্টভাবে সংরক্ষণ করা হয়, আবর্জনা সংগ্রহের থ্রেডের স্ট্যাকের উপরে নয়।

একবার কোনও নোডের বাচ্চাদের বাদে সমস্ত কিছু স্ক্যান হয়ে গেলে ননটি স্ক্যানবিহীন সারি থেকে সরানো যেতে পারে। এটি মূলত একটি টেল কল অপ্টিমাইজেশন। আবর্জনা সংগ্রহকারীরা সর্বশেষে নোডের গভীরতম শিশুকে স্ক্যান করার চেষ্টা করার জন্য হিউরিস্টিক্স অন্তর্ভুক্ত করতে পারে; উদাহরণস্বরূপ, লিস্পের জন্য একটি জিসি carএর consআগে স্ক্যান করা উচিত cdr

একটি স্ক্যানবিহীন সারিতে রাখা এড়ানোর এক উপায় হ'ল পয়েন্টারগুলিকে জায়গায় রেখে সংশোধন করা, যা শিশুকে অস্থায়ীভাবে পিতামাতার দিকে নির্দেশ করে। এটি একটি ধ্রুবক-স্মৃতি গাছের ট্র্যাভারসাল কৌশল যা আবর্জনা সংগ্রহকারী ব্যতীত অন্য প্রসঙ্গে ব্যবহার করা হয়। এই কৌশলটির খারাপ দিকটি হ'ল জিসি যখন কোনও ডেটা স্ট্রাকচারকে অনুসরণ করছেন, তখন ডেটা স্ট্রাকচারটি অবৈধ, সুতরাং জিসিকে বিশ্ব বন্ধ করতে হবে। এটি কোনও চুক্তি ভঙ্গকারী নয়: অনেক আবর্জনা সংগ্রহকারী এমন একটি পর্যায় অন্তর্ভুক্ত করে যা বিশ্বকে থামিয়ে দেয়, সেই পর্যায়গুলি ছাড়াও যা আবশ্যকভাবে আবর্জনা মিস করতে পারে না।


2
শেষ অনুচ্ছেদে বর্ণিত কৌশলটিকে প্রায়শই " পয়েন্টার রিভার্সাল " বলা হয় ।
যুক্তি যুক্তি

@ ওয়ান্ডারিংলজিক হ্যাঁ, পয়েন্টার বিপরীতমুখী হ'ল আমি কীভাবে এটি আমার নিজের উত্তরে বলেছি। এটি ডয়চ, শোর এবং ওয়েট (1967) এর কারণে। যাইহোক, এটা রাষ্ট্র যে এটা ধ্রুব মেমরির কাজ করে ভুল: এটা প্রয়োজন নেই সঙ্গে প্রতিটি কক্ষের জন্য অতিরিক্ত বিট পয়েন্টার, এই যদিও বিট স্ট্যাকগুলি ব্যবহার করে কমে যাবে। আপনার উল্লেখযোগ্য গ্রহণযোগ্য উত্তর একই কারণে পুরোপুরি সঠিক বা সম্পূর্ণ নয়। পিlog2pp
বাবু

এই অতিরিক্ত বিটগুলির প্রয়োজন ছাড়াই আমি একটি কাস্টম জিসিতে পয়েন্টার রিভার্সাল ব্যবহার করেছি ; কৌশলটি ছিল স্মৃতিতে বস্তুর একটি বিশেষ ইন-মেমরি উপস্থাপনা ব্যবহার করা। যথা, "শিরোলেখ" অবজেক্টটি মাঝখানে ছিল, শিরোনামের আগে পয়েন্টার ক্ষেত্র এবং পরে নন-পয়েন্টার ক্ষেত্র; তদুপরি, সমস্ত পয়েন্টার সারিবদ্ধ ছিল এবং শিরোনামটি সর্বদা সেট করা সর্বনিম্ন উল্লেখযোগ্য বিট সহ একটি ক্ষেত্র অন্তর্ভুক্ত করে। সুতরাং, পয়েন্টারটি বিপরীতমুখী ব্যাকট্র্যাক চলাকালীন, পরবর্তী পয়েন্টারে পৌঁছে এবং লক্ষ্য করে আমরা কোনও জিনিস দিয়ে শেষ করেছি অতিরিক্ত বিট ছাড়াই দ্ব্যর্থহীনভাবে করা যেতে পারে। এই বিন্যাসটি ওওপি উত্তরাধিকারকেও সমর্থন করে।
টমাস পর্নিন

@ থমাস পোর্নিন আমি মনে করি বিট তথ্য কোথাও থাকা উচিত। প্রশ্নটা কোথায়? আমরা কি আড্ডায় এই আলোচনা করতে পারি? আমাকে এখনই চলে যেতে হবে তবে আমি এর নীচে যেতে চাই। বা ওয়েবে অ্যাক্সেসযোগ্য একটি বর্ণনা আছে?
বাবু


11

সংক্ষেপে : আবর্জনা সংগ্রহকারীরা পুনরাবৃত্তি ব্যবহার করে না। তারা কেবল দুটি সেট ট্র্যাক করে ট্রেসিং নিয়ন্ত্রণ করে (এটি একত্রিত হতে পারে)। ট্রেসিং এবং সেল প্রসেসিংয়ের ক্রমটি অপ্রাসঙ্গিক, যা সেটগুলি উপস্থাপনের জন্য যথেষ্ট বাস্তবায়নের স্বাধীনতা দেয়। অতএব অনেকগুলি সমাধান রয়েছে যা মেমরির ব্যবহারে আসলে খুব সস্তা। এটি জরুরী, যেহেতু গিরিটি স্মৃতিশক্তি শেষ হয়ে না যাওয়ার পরে জিসিকে সঠিকভাবে বলা হয়। বড় ভার্চুয়াল স্মৃতিগুলির সাথে বিষয়গুলি কিছুটা আলাদা, কারণ নতুন পৃষ্ঠা সহজেই বরাদ্দ করা যেতে পারে এবং শত্রুতে জায়গার অভাব হয় না, তবে ডেটা লোকালটির অভাব হয় ।

আমি ধরে নিই যে আপনি আবর্জনা সংগ্রহকারীদের সন্ধানের বিষয়টি বিবেচনা করছেন, এমন রেফারেন্স গণনা নেই যার জন্য আপনার প্রশ্ন প্রয়োগ হচ্ছে বলে মনে হচ্ছে না।

প্রশ্নটি কোনও সেটকে ট্র্যাক রাখার জন্য ট্রেসিংয়ের মেমরির ব্যয়টির দিকে মনোনিবেশ করছে: অ্যাক্সেসযোগ্য মেমরি কোষগুলির সেট (অন্রেসডের জন্য) এখনও পয়েন্টার রয়েছে যা এখনও খুঁজে পাওয়া যায়নি। আবর্জনা সংগ্রহের ক্ষেত্রে এটি মেমরির অর্ধেক সমস্যা । জিসিকে অবশ্যই অন্য একটি সেটের খোঁজখবর রাখতে হবে: যে সমস্ত কোষ অ্যাক্সেসযোগ্য বলে প্রমাণিত হয়েছে সেগুলির সেট (পরিদর্শনের জন্য), যাতে প্রক্রিয়া শেষে অন্যান্য সমস্ত ঘর পুনরায় দাবি করতে পারে। একজনের সাথে আলোচনা করা এবং অপরটির সাথে আলোচনা করা সীমিত অর্থবোধ করে না কারণ তাদের একই রকম ব্যয় হতে পারে, একই ধরণের সমাধান ব্যবহার করতে পারে এবং একত্রিত হতে পারে।ভিUV

প্রথম যে বিষয়টি লক্ষ্যণীয় তা হ'ল সমস্ত ট্রেসিং জিসি প্রোগ্রাম থেকে অ্যাক্সেসযোগ্য মেমরির কোষগুলির নির্দেশিত গ্রাফের নিয়মিত অনুসন্ধানের উপর ভিত্তি করে একই বিমূর্ত মডেলটিকে অনুসরণ করে, যেখানে মেমরি কোষগুলি শীর্ষে এবং পয়েন্টারগুলি নির্দেশিত প্রান্ত হয়। এটি নিম্নলিখিত সেটগুলির জন্য ব্যবহার করে:

  • ইতিমধ্যে মিউটারের দ্বারা অ্যাক্সেসযোগ্য কক্ষগুলির সেট (পরিদর্শন করা) পাওয়া গেছে , যেমন প্রোগ্রাম বা অ্যালগরিদম যার জন্য জিসি করা হয়। সেট দুই টুকরো করা সাব-সেট নির্বাচন বিভক্ত হয়: ;ভি ভি = ইউ টিVVV=UT

  • পয়েন্টারগুলি সহ এখনও পরিদর্শন করা হয়নি এমন পরিদর্শনকৃত কক্ষগুলির সেট (অনুবিযুক্ত);U

  • পরিদর্শন করা কক্ষগুলির সেট (সন্ধান করা) যা তাদের সমস্ত পয়েন্টার সনাক্ত করেছিল।T

  • আমরা ব্যবহার করব কিনা তা হিপগুলির সমস্ত কক্ষের সেটও নোট করি ।H

অ্যালগরিদমকে কাজ করার জন্য কেবলমাত্র এবং , বা এবং , কোনওভাবে উপস্থাপন করা দরকার।ইউ ইউ টিVUUT

কিছু শিকড় পয়েন্টার যে run সময় সিস্টেম (সাধারণত স্ট্যাক বরাদ্দ মেমরি পয়েন্টার) পরিচিত হয় থেকে অ্যালগরিদম হয়ে পড়েন এবং রাখে সমস্ত কক্ষ তারা অনাবিষ্কৃত সেটে বাতলান (ইন অত: পর খুব)।ভিUV

তারপরে সংগ্রাহক একের পর এক কোষ গ্রহণ করে এবং প্রতিটি কক্ষের সমস্ত পয়েন্টার পরীক্ষা করে। প্রতিটি পয়েন্টারের জন্য, যদি নির্দেশিত ঘরটি তবে কিছুই করা হয়নি, অন্যথায় পয়েন্ট পয়েন্টটি যুক্ত করা হয়েছে , কারণ এর পয়েন্টারগুলি এখনও পরীক্ষা করা হয়নি। এর সমস্ত পয়েন্টারগুলি প্রক্রিয়া করা হয়ে গেলে, সেল ট্রেসড সেট থেকে ট্রেসড সেট তে ট্রান্সফার করা হয় ।সি ভি ইউ সি ইউ টিUcVUcUT

UUV=TVHVV

VUUT

আমি সেলটি কী, সেগুলি একটি আকারে আসে বা অনেকগুলি, কীভাবে আমরা সেগুলিতে পয়েন্টার পাই, কীভাবে তাদের সংক্রামক করা যেতে পারে, এবং জঞ্জাল সংগ্রহের উপর জরিপগুলিতে আপনি যে বইগুলি এবং জরিপগুলি খুঁজে পেতে পারেন তার অনেকগুলি প্রযুক্তি সম্পর্কিত সমস্যা সম্পর্কেও আমি এড়িয়ে চলেছি ।

U

এই সেটগুলিকে প্রকৃতপক্ষে উপস্থাপন করার পথে যেখানে পরিচিত বাস্তবায়নগুলি পৃথক হয়। অনেক কৌশল বাস্তবে ব্যবহৃত হয়েছে:

  • বিট ম্যাপ: কিছু মেমরি স্পেস এমন একটি মানচিত্রের জন্য সংরক্ষিত থাকে যা প্রতিটি স্মৃতি কক্ষের জন্য একটি বিট থাকে, যা ঘরের অ্যাড্রেস ব্যবহার করে খুঁজে পাওয়া যায়। সামঞ্জস্যপূর্ণ সেল মানচিত্রে সংজ্ঞায়িত সেটে থাকলে বিটটি চালু থাকে। যদি কেবল বিট মানচিত্র ব্যবহার করা হয় তবে আপনার ঘরে প্রতি 2 বিট প্রয়োজন need

  • বিকল্পভাবে, প্রতিটি কক্ষে এটি চিহ্নিত করার জন্য আপনার কাছে বিশেষ ট্যাগ বিটের (বা 2) স্থান থাকতে পারে।

  • log2pp

  • আপনি ঘরের সামগ্রী এবং এর পয়েন্টারগুলিতে একটি শিকারী পরীক্ষা করতে পারেন।

  • আপনি উপস্থাপিত সেটের মালিকানাধীন সমস্ত কক্ষের উদ্দেশ্যে মেমরির একটি মুক্ত অংশে ঘরটি স্থানান্তর করতে পারেন।

  • VTTU

  • এমনকি আপনি একক সেট এমনকি এই কৌশলগুলি একত্রিত করতে পারেন।

যেমনটি বলা হয়েছে, উপরোক্ত সমস্ত কিছু প্রয়োগ করা আবর্জনা সংগ্রহকারী ব্যবহার করেছেন, কারও কারও কাছে মনে হয় অদ্ভুত। এটি সমস্ত বাস্তবায়নের বিভিন্ন সীমাবদ্ধতার উপর নির্ভর করে। এবং এগুলি মেমোরির ব্যবহারের তুলনায় কম সস্তা হতে পারে, সম্ভবত অর্ডার নীতিগুলি প্রক্রিয়াকরণে সহায়তা করা হয় যা সে উদ্দেশ্যে নির্দ্বিধায় চয়ন করা যেতে পারে, যেহেতু শেষ ফলাফলের জন্য তারা কোনও ব্যাপার না।

নতুন অঞ্চলে কোথাও ট্রান্সফারিং করা সবচেয়ে অদ্ভুত বলে মনে হচ্ছে এটি আসলে খুব সাধারণ: একে কপি সংগ্রহ বলা হয় called এটি বেশিরভাগ ভার্চুয়াল মেমরির সাথে ব্যবহৃত হয়।

স্পষ্টত কোনও পুনরাবৃত্তি নেই, এবং মিউটর অ্যালগরিদম স্ট্যাক ব্যবহার করতে হবে না।

আরেকটি গুরুত্বপূর্ণ বিষয়টি হ'ল বিশাল ভার্চুয়াল স্মৃতিগুলির জন্য অনেকগুলি আধুনিক জিসি প্রয়োগ করা হয় । তারপরে বাস্তবায়নের স্থান এবং অতিরিক্ত তালিকা বা স্ট্যাকের বিষয়টি কোনও সমস্যা নয় কারণ নতুন পৃষ্ঠাগুলি সহজেই বরাদ্দ করা যায়। যাইহোক, বড় ভার্চুয়াল স্মৃতিতে, শত্রু স্থানের অভাব নয়, স্থানীয়তার অভাব । তারপরে, সেটের প্রতিনিধিত্বকারী কাঠামো এবং তাদের ব্যবহারগুলি অবশ্যই ডেটা কাঠামোর স্থানীয়ত্ব এবং জিসি এক্সিকিউশনের সংরক্ষণের দিকে লক্ষ্য করা উচিত । সমস্যা স্থান নয় বরং সময়। অপ্রতুল বাস্তবায়ন মেমরির ওভারফ্লোয়ের চেয়ে অগ্রহণযোগ্য ধীরগতিতে বেশি দেখা যায়।

এই কৌশলগুলির বিভিন্ন সংমিশ্রণের ফলে আমি অনেকগুলি নির্দিষ্ট অ্যালগোরিদমগুলিতে রেফারেন্স দিইনি, কারণ এটি যথেষ্ট দীর্ঘ বলে মনে হচ্ছে।


4

স্ট্যাকের ওভারফ্লো এড়ানোর স্ট্যান্ডার্ড উপায় হ'ল একটি স্পষ্ট স্ট্যাক (গাদাতে ডেটা কাঠামো হিসাবে সঞ্চিত) ব্যবহার করা। এটিও এই উদ্দেশ্যে কাজ করে। আবর্জনা সংগ্রহকারীদের প্রায়শই আইটেমগুলির কাজের তালিকা থাকে যা পরীক্ষা করা / ট্র্যাভার করা দরকার, যা এই ভূমিকাটি পরিবেশন করে। উদাহরণস্বরূপ, আপনার "স্ক্যানবিহীন" সারি হুবহু এই ধরণের ধরণের উদাহরণ। সারিটি সম্ভাব্য আকারে বড় হতে পারে তবে এটি স্ট্যাকের ওভারফ্লো হতে পারে না, কারণ এটি স্ট্যাক সেগমেন্টে সংরক্ষণ করা হয়নি। যে কোনও ক্ষেত্রে এটি গাদা লাইভ অবজেক্টের সংখ্যার চেয়ে বড় কখনও হবে না।


যখন জিসি বলা হয়, তখন গাদাটি সাধারণত পূর্ণ থাকে। আরেকটি বিষয় হ'ল এটি ঘটে যে স্ট্যাক এবং গাদা একই স্মৃতির স্থানের উভয় প্রান্ত থেকে বৃদ্ধি পায় ..
বাবু

4

আবর্জনা সংগ্রহের "ক্লাসিক" বর্ণনায় (উদাহরণস্বরূপ, মার্ক উইলসন, " ইউনিকপ্রসেসর আবর্জনা সংগ্রহের কৌশল ", মেমরি ম্যানেজমেন্ট সম্পর্কিত ইন্টার'শ ওয়ার্কশপ , 1992 ) ( বিকল্প লিঙ্ক ), বা অ্যান্ড্রু অ্যাপেলের আধুনিক সংকলক বাস্তবায়নের (কেমব্রিজ বিশ্ববিদ্যালয় প্রেস, 1998)), সংগ্রহকারীদের "মার্ক এবং সুইপ" বা "অনুলিপি" হিসাবে শ্রেণীবদ্ধ করা হয়।

@ গিলসের উত্তরে বর্ণিত হিসাবে মার্ক এবং সুইপ সংগ্রহকারীগণ পয়েন্টার-রিভার্সাল ব্যবহার করে অতিরিক্ত জায়গার প্রয়োজন এড়াচ্ছেন। আপেল বলেছে যে নুথ পয়েন্টার-রিভার্সাল অ্যালগরিদমকে পিটার ডয়চে এবং হারবার্ট শোর এবং ডব্লুএম ওয়েইটের কাছে দায়ী করেছেন।

আবর্জনা সংগ্রহকারীদের অনুলিপি করা অতিরিক্ত স্থানের প্রয়োজন ছাড়াই একটি সারি ট্র্যাভারসাল সম্পাদন করতে প্রায়শই চেনি'র অ্যালগরিদম বলে । এই অ্যালগরিদম সি জে চেনি, "একটি নন-রিসার্সিভ লিস্ট কমপ্যাক্টিং অ্যালগরিদম", কম এ চালু হয়েছিল। এসিএম , 13 (11): 677-678, 1970।

একটি অনুলিপি আবর্জনা সংগ্রহকারীতে আপনার মেমরির একটি বিশাল অংশ রয়েছে যা আপনি সংগ্রহ করার চেষ্টা করছেন, যাকে স্থান থেকে ডাকা হয় এবং মেমরির একটি অংশ যা আপনি টু স্পেস বলে কপির জন্য ব্যবহার করছেন । টু স্পেসটি scanসর্বাধিক পুরানো অনুলিপি-অন-স্ক্যানবিহীন রেকর্ডের দিকে নির্দেশকারী পয়েন্টার সহ একটি সারি হিসাবে সজ্জিত এবং freeস্থানটিতে পরবর্তী মুক্ত অবস্থানের দিকে নির্দেশকারী একটি পয়েন্টার। উইলসনের কাগজ থেকে এটির চিত্রটি হ'ল:

চেনি এর অ্যালগরিদমের উদাহরণ

আপনি প্রতিটি আইটেম টু স্পেসে স্ক্যান করার সাথে সাথে তার বাচ্চাদের স্থান থেকে স্পেসের freeপয়েন্টারে একটি অনুলিপি করতে পারেন এবং তারপরে পয়েন্টারটি স্থান থেকে অন্য স্থানের মধ্যে শিশুটির নতুন অনুলিপিতে পরিবর্তিত করুন change যখন আপনার ডেটা স্ট্রাকচারগুলি গাছ না থাকে তখন আপনার একটি অতিরিক্ত ট্রিক ব্যবহার করতে হবে (যখন কোনও সন্তানের একাধিক পিতামাতারা থাকতে পারে)। সেক্ষেত্রে আপনি যখন কোনও শিশুকে স্পেস থেকে স্পেসে অনুলিপি করবেন তখন আপনার সন্তানের পুরানো সংস্করণটি ফরোয়ার্ডিং পয়েন্টার সহ সন্তানের নতুন অনুলিপিটিতে ওভাররাইট করা দরকার । তারপরে আপনি যদি সন্তানের পুরানো সংস্করণে অন্য কোনও পয়েন্টার স্ক্যান করেন তবে আপনি বুঝতে পারবেন যে এটি ইতিমধ্যে অনুলিপি করা হয়েছে, এবং আবার অনুলিপি করবেন না।


আসলে, আমার উত্তরে বর্ণিত হিসাবে, মার্ক + সুইপ এবং অনুলিপি সংগ্রহ উভয়ই একই বিমূর্ত গ্রাফ অ্যালগরিদম। এমএস এবং অনুলিপি সংগ্রহ কেবল বিমূর্ত অ্যালগরিদম দ্বারা ব্যবহৃত সেটগুলি যেভাবে প্রয়োগ করা হয় তার মধ্যেই পার্থক্য রয়েছে এবং আমি আমার উত্তরে বর্ণিত সেট বাস্তবায়ন কৌশলগুলির সংমিশ্রণে উভয় পরিবারকে অনেকগুলি বৈকল্পিক সহ অন্তর্ভুক্ত করা হয়েছে। কিছু জিসি ভেরিয়েন্টগুলি আসলে একই জিসিতে এমএস এবং কপি মিশ্রিত করে। এমএস এবং অনুলিপি পৃথক করা বইগুলি কাঠামো গঠনের একটি সুবিধাজনক উপায় হিসাবে কেউ কেউ দেখেছেন তবে এটি একটি স্বেচ্ছাসেবী এবং আমি পুরানো, দৃষ্টি বিশ্বাস করি।
বাবু

@ বাবু: যদি কেউ একটি অনুলিপি অ্যালগরিদম ব্যবহার করে থাকেন যেখানে পরিদর্শন করা সমস্ত কিছু অনুলিপি করা হবে (ধীরে হলেও এটি কার্যকর প্ল্যাটফর্মগুলিতে কার্যকর হতে পারে যেখানে কার্যকরী সেটটি এত বড় কখনও হয় না), কিছু অ্যালগরিদম কিছুটা সরল করা যেতে পারে যেহেতু কেউ ব্যবহার করতে পারে স্মৃতিটি পূর্বে একটি স্ক্র্যাচপ্যাড হিসাবে কোনও স্থানান্তরিত বস্তুর দ্বারা দখল করা হয়েছিল। সংগ্রহের সময় অন্য থ্রেডগুলি কেবলমাত্র পঠনযোগ্য অ্যাক্সেসগুলি সংগ্রহের ক্ষেত্রে সীমিত ক্ষমতা অর্জন করতে পারে তবে শর্ত থাকে যে প্রতিটি পড়ার আগে এবং পরে একটি পরীক্ষা করে এবং যদি কোনও বস্তু সরিয়ে নিয়ে যায় তবে ফরোয়ার্ডিং পয়েন্টারটি অনুসরণ করে।
সুপারক্যাট

আপনি কী বলতে চাইছেন, আপনার উদ্দেশ্য কী তা আমি নিশ্চিত নই আপনার কিছু বক্তব্য সঠিক বলে মনে হচ্ছে। তবে আমি বুঝতে পারি না আপনি কীভাবে সিসি চক্র শেষ হওয়ার আগে স্পেস থেকে ব্যবহার করতে পারেন (এতে ফরোয়ার্ডিং পয়েন্টার রয়েছে)। এবং এটি কি জন্য একটি স্ক্র্যাচপ্যাড হবে? আলগোরিটমকে কীভাবে সহজ করবেন? জিসি চলাকালীন কার্যকর হওয়া একাধিক মিউটেটর থ্রেড সম্পর্কে, এটি মূলত একটি অর্থোোনাল ইস্যু, যদিও এটি গুরুতরভাবে প্রয়োগের ক্ষেত্রে প্রভাব ফেলতে পারে। আমি মন্তব্যগুলিতে এটিকে সম্বোধন করার চেষ্টা করব না। এটি কেবল পঠনযোগ্য অ্যাক্সেসে কম সমস্যা উত্থাপন করা উচিত, তবে শয়তান বিশদে রয়েছে।
বাবু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.