آشنایی با مفهوم Garbage Collection در زبان برنامهنویسی پایتون
هنگامی که یک آبجکت از روی کلاس خاصی در زبان برنامهنویسی پایتون ساخته میشود یا متغیر جدیدی در برنامه تعریف میگردد، مفسر پایتون بخشی از حافظۀ سیستم را به ذخیرهسازی آبجکت مد نظر و یا آن متغیر جدید اختصاص میدهد و لازم به یادآوری است که حافظۀ یک سیستم علیرغم گنجایش بالایش، باز هم محدودیتهایی دارا است و از همین روی تعداد آبجکتها و متغیرهایی که میتوان در یک برنامه نمونهسازی کرد باید مدیریت شود چرا که اِشغال فضای سیستم توسط آبجکتها و متغیرهای فراوان، به خصوص در اپلیکیشنهای بزرگ و اینترپرایز، میتواند سیستم را با کمبود منابع مواجه ساخته و باعث بروز مشکل گردد.
در همین راستا، طراحان زبان پایتون قابلیتی را توسعه دادهاند که در آن به صورت اتوماتیک بخشی از فضای حافظه به آبجکت تعریفشده اختصاص داده شده و یا از آن گرفته میشود مضاف بر اینکه دولوپرها میتوانند در صورت لزوم و با بهکارگیری برخی قابلیتهای زبان برنامهنویسی پایتون دستوراتی را به منظور گرفتن حافظه از یکسری آبجکت مد نظر خود در اپلیکیشن مربوطه اِعمال کنند. به طور کلی، زبان پایتون از دو روش تحت عناوین Reference Counting و Garbage Collection جهت مدیریت حافظه در فرآیند توسعۀ اپلیکیشن استفاده میکند که در ادامه قصد داریم تا به بررسی نحوۀ عملکرد هر یک بپردازیم.
به طور کلی، یک دولوپر تازهکار متوجه نمیشود که در یک فرآیند خودکار گاربج کالکشن چه زمانی آبجکتی از حافظۀ سیستم پاک میشود اما متد از پیش تعریفشدهای به نام __()del__
برای این منظور وجود دارد که به محض حذف یک آبجکت و پاک کردن آن از حافظۀ سیستم فراخوانی میشود که تحت عنوان Destructor نیز شناخته میشود. در واقع، متد __()del__
مسئول پاک کردن آبجکتهایی است که در برنامۀ مربوطه مورد استفاده قرار نمیگیرند و درست قبل از پاک کردن آبجکتی فراخوانی میشود که بدون استفاده مانده و بخشی از حافظۀ دستگاه را بیدلیل به خود اختصاص داده است.
در پایان لازم به یادآوری است که فراخوانی گاربج کالکتور به صورت دستی کاری پُرریسک بوده و به منظور بهبود فرآیند استفاده از آن میباید نکاتی را مد نظر قرار دهیم به طوری که هرگز گاربج کالکشن را به تعداد دفعات بسیار فراخوانی نکنیم چرا که علیرغم آزادسازی فضای حافظه باز هم محاسبات مورد نیاز به منظور تشخیص آبجکتهای مناسب جهت حذف آنها از حافظه بار زیادی روی سیستم از نظر اختصاص زمان و همچنین انجام محاسبات مورد نیاز به همراه دارد مضاف بر اینکه فراخوانی گاربج کالکتور به صورت دستی میباید حتماً پس از پایان اجرای اپلیکیشن و دورهای انجام شود. در همین راستا، به منظور حفظ صحت آبجکتهای تعریفشده در برنامۀ خود نیاز به مطالعه، تحقیق و بررسی بیشتر جهت تسلط کامل بر نحوۀ فراخوانی گاربج کالکتور به صورت دستی داریم.