جمعآوری زباله و مدیریت حافظه
مدیریت حافظه نحوه تخصیص و بازپسگیری حافظه توسط برنامهها را کنترل میکند؛ جمعآوری زباله با شناسایی و آزاد کردن اشیایی که دیگر قابل دسترسی نیستند، بازپسگیری را خودکار میکند.
Definition
مدیریت حافظه عبارت است از تخصیص و بازپسگیری حافظه یک برنامه؛ جمعآوری زباله بازپسگیری خودکاری است که حافظه اشغال شده توسط اشیایی را که برنامه دیگر نمیتواند به آنها دسترسی پیدا کند، آزاد میکند و برنامهنویس را از آزادسازی صریح بینیاز میسازد.
Scope
این موضوع مدیریت خودکار و دستی حافظه را برای زماناجرای زبانها پوشش میدهد: شمارش ارجاع، علامتگذاری و جاروب، کپیبرداری، و جمعآوری نسلی؛ ردیابی قابلیت دسترسی؛ و مبادلات بین توان عملیاتی، زمان توقف، و سربار حافظه. همچنین به جمعآوریکنندههای همزمان و افزایشی و رابطه بین استراتژی جمعآوری و طراحی زبان میپردازد.
Core questions
- یک جمعآوریکننده چگونه تعیین میکند که کدام اشیاء هنوز مورد نیاز هستند؟
- مبادلات بین توان عملیاتی، تأخیر، و ردپای حافظه چیست؟
- چرا جداسازی اشیاء بر اساس سن (جمعآوری نسلی) کارایی را بهبود میبخشد؟
- چگونه جمعآوری میتواند از توقفهای طولانی در سیستمهای تعاملی یا بلادرنگ جلوگیری کند؟
Key theories
- جمعآوری زباله ردیابی
- مککارتی جمعآوری خودکار زباله را برای لیسپ معرفی کرد و ایده بازپسگیری حافظه با ردیابی اینکه کدام اشیاء از ریشههای برنامه قابل دسترسی هستند را پایهگذاری کرد.
- جمعآوری نسلی
- لیبرمن و هیویت مشاهده کردند که بیشتر اشیاء در سنین پایین از بین میروند و پیشنهاد کردند که نسلهای جوانتر را با تناوب بیشتری جمعآوری کنند، که به طور چشمگیری هزینه جمعآوری را در عمل کاهش میدهد (فرضیه نسلی).
- طبقهبندی تکنیکهای جمعآوری
- ویلسون و کتاب راهنمای جمعآوری زباله فضای طراحی شمارش ارجاع، علامتگذاری-جاروب، کپیبرداری، جمعآوریکنندههای افزایشی و همزمان و مبادلات عملکردی آنها را سازماندهی میکنند.
Clinical relevance
مدیریت خودکار حافظه کل کلاسهایی از باگها مانند اشارهگرهای آویزان و نشت حافظه را از بین میبرد، به همین دلیل است که اکثر زبانهای سطح بالا به جمعآوری زباله متکی هستند. انتخاب جمعآوریکننده به شدت بر تأخیر و توان عملیاتی برنامه، به ویژه برای سیستمهای تعاملی و سرور، تأثیر میگذارد.
History
مککارتی جمعآوری زباله را با لیسپ در سال 1960 معرفی کرد. جمعآوری کپیبرداری (چنی) و شمارش ارجاع به دنبال آن آمدند، و جمعآوریکننده نسلی لیبرمن و هیویت در سال 1983 از طول عمر اشیاء بهرهبرداری کرد. دهههای بعدی جمعآوریکنندههای افزایشی، همزمان، و مبتنی بر منطقه را تولید کردند که به طور جامع در کار ویلسون در سال 1992 و کتاب راهنمای جمعآوری زباله در سال 2011 بررسی شدهاند.
Debates
- جمعآوری خودکار در مقابل مدیریت دستی یا مبتنی بر مالکیت
- طراحان در مورد جمعآوری زباله، که ایمن و راحت است اما میتواند توقفها و سربار ایجاد کند، در مقابل مدیریت دستی یا مبتنی بر مالکیت، که عملکرد قابل پیشبینی و ردپای کمتر را با هزینه بار برنامهنویس و ریسک ارائه میدهد، بحث میکنند.
Key figures
- John McCarthy
- Henry Lieberman
- Carl Hewitt
- Richard Jones
- Paul Wilson
Related topics
Seminal works
- mccarthy1960
- lieberman1983
- wilson1992
- jones2011
Frequently asked questions
- یک جمعآوریکننده زباله چگونه میداند کدام اشیاء را آزاد کند؟
- یک جمعآوریکننده ردیابی از ریشههای شناخته شده، مانند متغیرهای پشته و سراسری، شروع میکند و ارجاعات را دنبال میکند تا تمام اشیاء قابل دسترسی را علامتگذاری کند؛ هر چیزی که قابل دسترسی نباشد، غیرقابل دسترسی است و میتواند بازپس گرفته شود.
- چرا جمعآوری زباله نسلی مؤثر است؟
- زیرا بیشتر اشیاء بلافاصله پس از تخصیص غیرقابل دسترسی میشوند، جمعآوری مکرر نسل جوان بیشتر زبالهها را با هزینه کم بازپس میگیرد در حالی که اشیاء قدیمیتر و با عمر طولانیتر بسیار کمتر اسکن میشوند.