ازاي الـGarbage Collector بيهندل الذاكرة في JavaScript

x32x01
  • بواسطة x32x01 ||
هل سألت نفسك قبل كده إزاي الـ JavaScript بتتعامل مع الذاكرة؟ 🤔

موضوع مهم جدًا بيأثر على أداء أي تطبيق وهو الـ Garbage Collector واللي مسؤول عن إدارة الميموري وتنظيفها من البيانات اللي مالهاش لازمة.

🔍 أنواع البيانات في JavaScript​

الـJavaScript بتقسم البيانات لنوعين رئيسيين:
  • Primitive Values: زي الأرقام والنصوص والـBoolean ودي بتتخزن في الـStack مباشرة.
  • Reference Values: زي الـObjects والـArrays ودي بتتخزن في الـHeap، والـVariable بيشاور عليها مش بيخزنها فعليًا.
💡 الفرق الأساسي إن الـPrimitive بيتخزن جوه الـVariable نفسه، أما الـReference فـبيحتوي على "عنوان" في الذاكرة.



🔄 مشكلة الـCircular Reference​

تخيل عندك 3 Objects كل واحد بيشاور على التاني زي سلسلة دايرة على نفسها 🔁
هنا بتظهر مشكلة اسمها Circular Reference Problem - لأن كل Object شايل Reference للتاني، وده بيمنع الـGarbage Collector من حذفهم حتى لو خلاص مش محتاجهم.



🧮 أول Algorithm: Reference Counting​

الـ Reference Counting Algorithm فكرته بسيطة جدًا:
"أي Object مش بيشاور عليه ولا Variable واحد، امسحه من الذاكرة."

يعني لما عدد الـReferences لأي Object يوصل لصفر، يتم مسحه ✅
لكن العيب الكبير؟
لو فيه Circular Reference - مش هيقدر يمسح أي حاجة، لأن كل Object لسه متشاور عليه من التاني 😅



🧹 ثاني Algorithm: Mark-And-Sweep​

الـ Mark-And-Sweep Algorithm جاي يحل المشكلة دي 🔥

الفكرة إنه بيبدأ من حاجة اسمها Root (زي الـGlobal Object أو الـWindow)، ويمشي يشوف كل العناصر اللي ممكن يوصلها.
أي Object مش ممكن توصله من الـRoot، بيتحذف على طول من الذاكرة.

✅ الميزة: بيحل مشكلة الـCircular Reference.
❌ العيب: بيوقف البرنامج مؤقتًا أثناء المسح (Pause) وبيستهلك موارد أكتر.



⚖️ مقارنة بين Reference Counting وMark-And-Sweep​

الخاصيةReference CountingMark-And-Sweep
الأداءسريع ومباشرأبطأ بسبب عملية المسح
مشكلة الـCircular Reference❌ ما بيحلهاش✅ بيحلها
استهلاك المواردأقلأكتر
تنفيذ الكودبدون توقفبيعمل Pause مؤقت

💬 الخلاصة​

الاثنين ليهم مميزات وعيوب، ومفيش Algorithm كامل، لكن الـ Mark-And-Sweep هو اللي بيُستخدم في JavaScript الحديثة لأنه أكثر أمانًا ودقة في إدارة الذاكرة 🧠✨

🔗 نصيحة خفيفة​

لو بتشتغل على مشاريع كبيرة، حاول دايمًا تتجنب الـCircular References بإنك تمسح الـReferences اللي مش محتاجها يدويًا (تخليها null) 👌

📢 لو استفدت من الشرح 😍 شارك المقال مع أصحابك
واكتب في التعليقات إيه أكتر Algorithm شايفه عبقري في طريقة عمله! 💬🚀
 
  • 01.jpg
    01.jpg |
    38.2 كيلوبايت - المشاهدات: 152
  • 02.jpg
    02.jpg |
    12.5 كيلوبايت - المشاهدات: 148
  • 03.jpg
    03.jpg |
    15.3 كيلوبايت - المشاهدات: 150
  • 04.jpg
    04.jpg |
    16.9 كيلوبايت - المشاهدات: 151
  • 05.jpg
    05.jpg |
    18.9 كيلوبايت - المشاهدات: 152
  • 06.jpg
    06.jpg |
    19.8 كيلوبايت - المشاهدات: 158
  • 07.jpg
    07.jpg |
    22.5 كيلوبايت - المشاهدات: 149
  • 08.jpg
    08.jpg |
    23.9 كيلوبايت - المشاهدات: 150
  • 09.jpg
    09.jpg |
    24.4 كيلوبايت - المشاهدات: 148
التعديل الأخير:
المواضيع ذات الصلة
x32x01
الردود
0
المشاهدات
631
x32x01
x32x01
x32x01
الردود
0
المشاهدات
425
x32x01
x32x01
x32x01
الردود
0
المشاهدات
631
x32x01
x32x01
x32x01
الردود
0
المشاهدات
685
x32x01
x32x01
x32x01
الردود
0
المشاهدات
685
x32x01
x32x01
x32x01
الردود
0
المشاهدات
733
x32x01
x32x01
x32x01
الردود
0
المشاهدات
162
x32x01
x32x01
x32x01
الردود
0
المشاهدات
962
x32x01
x32x01
x32x01
الردود
0
المشاهدات
898
x32x01
x32x01
x32x01
الردود
0
المشاهدات
396
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
1,830
المشاركات
2,027
أعضاء أكتب كود
466
أخر عضو
chaouki
عودة
أعلى