مرجع شماری

در علوم کامپیوتر، مرجع شماری یک روش برای ذخیره‌سازی شماره مراجع، اشاره گرها است یا یک منبع را مانند یک شی، یک بلوک حافظه، فضای دیسک یا منبع دیگری را کنترل می‌کند. مرجع شماری می‌تواند، به صورت دقیق‌تر، به الگوریتم زباله روبی اطلاق شود، که در این حالت از شمارش منبع استفاده می‌کند تا اشیایی را که دیگر منبع نیستند را آزاد کند.
استفاده در زباله روبی
مرجع شماری، به عنوان یک الگوریتم زباله روبی، تعداد مرجع‌هایی که یک شی برای اشیای دیگر نگهداری می‌کند را پیگیری می‌کند. اگر شماره مرجع یک شی صفر شود، آنگاه آن شی غیرقابل دسترس شده و نابود می‌شود.
هنگامی که یک شی نابود می‌شود، شماره مرجع هر شی که منبع شی نابود شده باشد، کاهش می‌یابد. به همین دلیل حذف کردن یک منبع، می‌تواند به صورت پنهانی به آزاد شدن تعداد زیادی شی منجر شود. یک تغییر رایج به مرجع شماری اجازه می‌دهد تا به صورت افزایشی عمل کند، به جای آنکه یک شی را در زمانی که شماره مرجع آن صفر می‌شود، نابود کند یعنی در این حالت این شی به لیست اشیاء بدون مرجع اضافه می‌شود و در زمان خاصی یک یا بیش از یک شی از این لیست نابود می‌شود.
شماره‌های مرجع ساده نیازمند به روز رسانی متداول هستند. هر زمان که یک مرجع نابود شده یا جایگزین می‌شود شماره مرجع آن شی کم می‌شود، و همچنین در هر زمانی که یک مرجع ایجاد شده یا کپی می‌شود شماره مرجع آن شی زیاد می‌شود.
همچنین مرجع شماری در سیستم‌های عامل و سیستم‌های توزیع شده، هر جا که دنبال کردن زباله روبی غیر افزایشی کامل، به دلیل اندازه گراف شی و سرعت دستیابی پایین بسیار زمان بر باشد، استفاده می‌شود.
محاسن و معایب
مزیت اصلی مرجع شماری بر روش دنبال کردن زباله روبی، این است که اشیاء در زمانی که دیگر قابل مرجع شدن نیستند و در حالت افزایشی بدون توقف‌های طولانی برای دوره‌های جمع‌آوری و با زمان تعریف شده کاملا مشخص برای طول عمر هر شی، اصلاح می‌شوند. در کاربردهای بلا درنگ و در سیستم‌هایی با حافظه محدود، حساسیت مهم است. مرجع شماری همچنین در میان ساده‌ترین فرم‌های زباله روبی از لحاظ اجرا شدن است. همچنین اجازه مدیریت موثر منابع بدون حافظه مانند اشیاء عملگر سیستم، که معمولا از حافظه کمیاب‌تر هستند، را می‌دهد (سیستم‌های دنبال گر GC، از تمام کننده‌ها برای این امر استفاده می‌کنند ولی این اصلاح با تاخیر ممکن است مشکلاتی را ایجاد کند). شمارش مرجع وزن دار یک راه حل خوب برای زباله روبی در یک سیستم گسترده است.
دوره‌های زباله روبی دنبال کننده در صورتی راه اندازی می‌شوند که یک مجموعه از اشیاء زنده بیشتر حافظه قابل دسترس را پر کنند، این امر نیازمند حافظه اضافی است تا موثر واقع شود. عملکرد مرجع شماری در صورت کاهش کل فضای آزاد، بدتر نمی‌شود.
مرجع شماری در حالت ساده ۲ اشکال اصلی نسبت به زباله روبی دنبال کننده دارد، که هر کدام نیازمند مکانیزم‌های اضافی برای بهبودشان هستند:
به روز رسانی‌های متداول، یک منبع نا کارآمدی هستند.
الگوریتم ساده مورد استفاده در مرجع شماری، قابلیت کنترل دوره‌های مرجع را ندارد.
تفسیر نموداری (گرافی)
به هنگام سر و کار داشتن با برنامه‌های زباله روبی، مفید است که درباره گراف مرجع بیندیشیم که یک گراف جهتداری است که رئوس آن اشیاء هستند و یک یال از شی A به شی B وجود دارد اگر A مرجعی از B را نگه دارد. همچنین ما یک راس یا رئوس خاصی داریم که نشان دهنده متغیرهای محلی و مراجع محلی هستند که به وسیله سیستم زمان اجرا نگه داری می‌شوند و هیچ‌گاه هیچ یالی به این گره‌ها نمی‌روند، هر چند یال‌ها می‌توانند به وسیله آنها به گره‌های دیگر بروند.
مثال‌هایی از کاربرد این الگوریتم
Cocoa
چار چوب Cocoa در Apple از مرجع شماری دستی که بسیار شبیه COM است استفاده می‌کنند. هر چند در Mac OS v10.5، Cocoa زباله روبی اتوماتیک دارد.
PHP
PHP از یک مکانیزم مرجع شماری برای مدیریت متغیر داخلی‌اش استفاده می‌کند. PHP به شما این اجازه را می‌دهد که به وسیله عملگرهای کاربر دوره جمع‌آوری را روشن و خاموش نماید. همچنین به شما این اجازه را می‌دهد تا به صورت دستی مکانیزم پاکسازی را اجرا کنید.
Python
Python نیز همچنین از مرجع شماری استفاده می‌کند و امکان ردیابی دوره را می‌دهد.