مدیریت حافظه در جاوا اسکریپت


در زبان های سطح پایین تر مثل C تابع هایی وجود دارد مثل malloc و free که با استفاده از آن ها می توان به صورت دستی حافظه را مدیریت کرد .جاوااسکریپ بر خلاف آن وقتی که یک شی ساخته شد حافظه را به آن اختصاص می دهد و هنگامی که از آن آن استفاده نمی شود حافظه را آزاد می کند . این مفهوم برای توسعه دهندگان javascript یک تصور غلط به وجود می آورد : دیگر نیازی نیست تا حافظه را در کد های خود مدیریت کنیم . در این مقاله در مورد مدیریت حافظه در جاوا اسکریپت و اهمیت آن بحث خواهیم کرد .
چرخه حیاط حافظه به شکل زیر است:
۱- اختصاص دادن حافظه
۲- استفاده از فضای اختصاص داده شده (خواندن و نوشتن در حافظه)
۳- خالی کردن حافظه هتگامی که دیگر به آن فضا نیازی نداریم
اختصاص حافظه در جاوا اسکریپت :
مقدار دهی اولیه به متغیر ها :
جاوا اسکریپت برای این که برنامه نویس را به زحمت نندازد هنگام تعریف متغیر حافظه را هم به آن اختصاص می دهد .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
var n = 123; // allocates memory for a number var s = 'azerty'; // allocates memory for a string var o = { a: 1, b: null }; // allocates memory for an object and contained values // (like object) allocates memory for the array and // contained values var a = [1, null, 'abra']; function f(a) { return a + 2; } // allocates a function (which is a callable object) // function expressions also allocate an object someElement.addEventListener('click', function() { someElement.style.backgroundColor = 'blue'; }, false); |
اختصاص دادن حافظه با فراخوانی تابع:
با فراخوانی یک تابع در جاوا اسکریپت متناسب با تابع یک حافظه به آن اختصاص داده می شود :
1 2 3 |
var d = new Date(); // allocates a Date object var e = document.createElement('div'); // allocates a DOM element |
استفاده از متغیر ها :
استفاده از متغیر ها به این معنی است که شما یک مقدار را در از حافظه اختصاص داده شده بخوانید یا بخواهید مقداری را در آن قرار دهید . این کار می تواند با عملگر ها یا تابع هایی انجام شود .
آزاد سازی حافظه :
اکثر چالش های که در مدیریت حافظه با آن روبرو می شویم در این مرحله است . سخت ترین کار در این مرحله پیدا کردن حافظه ای است که استفاده می شده و دیگر قرار نیست از آن استفاده کنیم . برنامه نویس باید این حافظه را پیدا کند و اگر دیگر به آن نیازی ندارد آن را آزاد کند .
در زبان های برنامه نویسی سطح بالا قطعه ای برای این منظور قرار داده شده است که به آن “garbage collector” می گویند . هنگامی که قطعه ای از حافظه اشغال بوده و اکنون دیگر استفاده نمی شود garbage collector آن را به صورت اتوماتیک آزاد می کند . مسئله یافتن قطعه حافظه برای آزاد سازی به صورت تقریبی انجام می گیرد و یکی از مسائل غیرقابل حل (حل با الگوریتم ) است .
برای پیاده سازی گاربیج کالکتور ها راه حل ها و الگوریتم هایی ارائه شده و پیاده سازی آن ها دارای محدودیت هایی نیز هست اگر می خواهید با این الگوریتم ها بیشتر آشنا شوید و در مورد آن ها بیشتر بدانید خواندن این مقاله را پیشنهاد می کنم .
دیدگاهتان را بنویسید