এআরসি কেবল পুরানো রক্ষণ / রিলিজ (এমআরসি) খেলে কম্পাইলারটি কখন রক্ষণ / রিলিজ কল করতে হবে তা নির্ধারণ করে। এটিতে জিসি সিস্টেমের চেয়ে উচ্চতর কর্মক্ষমতা, নিম্ন শিখরের মেমরির ব্যবহার এবং আরও অনুমানযোগ্য পারফরম্যান্স থাকে।
অন্যদিকে এআরসি (বা এমআরসি) দিয়ে কিছু ধরণের ডেটা স্ট্রাকচার সম্ভব নয়, অন্যদিকে জিসি সেগুলি পরিচালনা করতে পারে।
উদাহরণস্বরূপ, যদি আপনার নোড নামে একটি ক্লাস থাকে, এবং নোডে একটি শিশুদের এনএসআরারি থাকে এবং এর পিতামাতার একটি একক রেফারেন্স থাকে যে জিসির সাথে "স্রেফ কাজ করে"। এআরসি (এবং ম্যানুয়াল রেফারেন্স গণনাও) এর সাথে আপনার একটি সমস্যা আছে। যে কোনও নোড তার বাচ্চাদের এবং তার পিতামাতার কাছ থেকে রেফারেন্স করা হবে।
ভালো লেগেছে:
A -> [B1, B2, B3]
B1 -> A, B2 -> A, B3 -> A
আপনি এ ব্যবহার করার সময় সমস্ত কিছু ঠিক আছে (স্থানীয় ভেরিয়েবলের মাধ্যমে বলুন)।
আপনি এটি (এবং বি 1 / বি 2 / বি 3) সম্পন্ন করার পরে, একটি জিসি সিস্টেম অবশেষে স্ট্যাক এবং সিপিইউ নিবন্ধগুলি থেকে শুরু করে এটি সন্ধান করতে পারে এমন সমস্ত কিছু দেখার সিদ্ধান্ত নেবে। এটি এ, বি 1, বি 2, বি 3 কখনই খুঁজে পাবে না তাই এটি তাদের চূড়ান্ত করে এবং স্মৃতিটিকে অন্য বস্তুতে পুনর্ব্যবহার করবে।
আপনি যখন আরসি বা এমআরসি ব্যবহার করেন এবং এ এর সাথে শেষ করেন এটির 3 (বি 1, বি 2, এবং বি 3 এর সমস্ত রেফারেন্স) থাকে এবং বি 1 / বি 2 / বি 3 এর 1 এর রেফারেন্স গণনা থাকে (এ এর এনএসআরাইতে একটি রেফারেন্স থাকে প্রতিটি)। তাই এগুলি সমস্তই জীবিত থাকে যদিও কোনও কিছুই সেগুলি ব্যবহার করতে পারে না।
সাধারণ সমাধান হ'ল সেই উল্লেখগুলির মধ্যে একটিকে দুর্বল হওয়া দরকার (রেফারেন্স গণনায় অবদান নয়) to এটি কিছু ব্যবহারের ধরণগুলির জন্য কাজ করবে, উদাহরণস্বরূপ যদি আপনি B1 / B2 / B3 কেবলমাত্র A. এর মাধ্যমে উল্লেখ করেন তবে অন্য নিদর্শনগুলিতে এটি ব্যর্থ হয়। উদাহরণস্বরূপ যদি আপনি মাঝে মাঝে বি 1 ধরে রাখেন, এবং অভিভাবক পয়েন্টারটির মাধ্যমে ফিরে যেতে পারেন এবং এ আবিষ্কার করবেন এমন এক দুর্বল রেফারেন্সের সাথে আপনি যদি কেবল B1 তে ধরে থাকেন তবে ক্যান (এবং সাধারণভাবে ইচ্ছামত) বাষ্পীভূত হয়ে B2 এবং B3 নেবে এর সাথে.
কখনও কখনও এটি কোনও সমস্যা নয়, তবে ডেটা জটিল কাঠামোর সাথে কাজ করার কয়েকটি খুব দরকারী এবং প্রাকৃতিক উপায়গুলি এআরসি / এমআরসি ব্যবহার করা খুব কঠিন।
সুতরাং এআরসি একই ধরণের সমস্যা জিসি লক্ষ্যবস্তু করে। তবে এআরসি ব্যবহারের নিদর্শনগুলির আরও সীমিত সেটগুলিতে কাজ করে তারপরে জিসি, সুতরাং আপনি যদি একটি জিসি ভাষা নেন (জাভা এর মতো) এবং এতে আরসি-র মতো কিছু আঁকেন তবে কিছু প্রোগ্রাম আর কাজ করবে না (বা কমপক্ষে পরিত্যক্ত মেমোরি তৈরি করবে) , এবং গুরুতর অদলবদল সমস্যা সৃষ্টি করতে পারে বা মেমরি বা অদলবদূর স্থান দখল করতে পারে)।
আপনি এও বলতে পারেন যে এআরসি পারফরম্যান্সকে (বা সম্ভবত অনুমানযোগ্যতা) আরও বড় অগ্রাধিকার দেয় তবে জিসি সাধারণ সমাধান হওয়ার ক্ষেত্রে আরও বেশি অগ্রাধিকার দেয়। ফলস্বরূপ, জিসির কম অনুমানযোগ্য সিপিইউ / মেমরির চাহিদা রয়েছে এবং এআরসি থেকে কম পারফরম্যান্স রয়েছে (সাধারণত) তবে কোনও ব্যবহারের প্যাটার্ন পরিচালনা করতে পারে। অনেকগুলি সাধারণ ব্যবহারের নিদর্শনগুলির জন্য এআরসি আরও ভাল কাজ করবে, তবে কয়েকটি (বৈধ!) ব্যবহারের ধরণগুলির জন্য এটি পড়ে এবং মারা যাবে।