أساسيات جامع البيانات المهملة في Lua
تعرّف إلى آلية عمل GC التزايدية في Lua: التعليم والمسح والحدود وcollectgarbage()
أساسيات جامع البيانات المهملة في Lua درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.
ما هي عملية جمع القمامة؟
تستخدم Lua جامع قمامة تلقائيًا لاستعادة الذاكرة التي تشغلها الكائنات (الجداول، والسلاسل النصية، والإغلاقات) التي لم يعد بالإمكان الوصول إليها من أي جذر.
خوارزمية التعليم والمسح
يستخدم GC في Lua خوارزمية تدريجية للتعليم والمسح. إذ يعلّم جميع الكائنات التي يمكن الوصول إليها بدءًا من الجذور، ثم يمسح الكائنات غير المعلّمة (ويحرّرها).
الجمع التدريجي
يعمل GC على دفعات صغيرة متداخلة مع تنفيذ البرنامج، مما يتجنب فترات التوقف الطويلة. وتتحكم معلمات خطوة GC في مقدار العمل المنفّذ في كل دفعة.
الدالة collectgarbage
تتحكم collectgarbage(opt, arg) مباشرةً في GC.
collectgarbage("collect") -- run a full GC cycle
collectgarbage("stop") -- stop automatic GC
collectgarbage("restart") -- restart automatic GC
print(collectgarbage("count")) -- KB of memory in useمعلمات GC
تحدد collectgarbage("setpause", n) الفاصل بين دورات GC (تعني القيمة 200 مضاعفة الذاكرة قبل الدورة التالية). وتتحكم "setstepmul" في سرعة GC.
collectgarbage("setpause", 200) -- default
collectgarbage("setstepmul", 200) -- defaultالمراجع الضعيفة وGC
يحافظ المرجع عادةً على بقاء الكائن. أما المرجع الضعيف فلا يفعل ذلك، إذ يمكن لـ GC جمع الكائن حتى إذا كان جدول ضعيف يشير إليه.
GC التوليدي (Lua 5.4)
قدمت Lua 5.4 وضع GC توليديًا اختياريًا. تُجمع الكائنات الحديثة كثيرًا، بينما تُجمع الكائنات القديمة بوتيرة أقل. ويمكن تبديله باستخدام collectgarbage("generational").
مُشغِّلات ضغط الذاكرة
يعمل GC تلقائيًا عندما يتجاوز استخدام الذاكرة حدًا معينًا (يحدده pause). ويؤدي تخصيص العديد من الجداول المؤقتة إلى زيادة ضغط GC وقد يبطئ البرنامج.
تقليل ضغط GC
- أعيدوا استخدام الجداول بدلًا من تخصيص جداول جديدة.
- تجنبوا إنشاء العديد من الإغلاقات قصيرة العمر داخل الحلقات المكثفة.
- خصّصوا مسبقًا المصفوفات ذات الأحجام المعروفة.
توحيد السلاسل النصية
يُوحّد Lua جميع السلاسل النصية، فتتشارك السلاسل المتطابقة كائنًا واحدًا. وهذا يعني أن إنشاء السلسلة يستغرق O(n) بسبب التجزئة، بينما تستغرق المقارنة O(1). والسلاسل القصيرة قليلة التكلفة جدًا.
المنهيات (__gc)
يمكن أن تحتوي الجداول على طريقة metamethod باسم __gc يستدعيها GC قبل تحرير الكائن. ويفيد ذلك في تحرير الموارد الخارجية مثل مقابض الملفات أو مؤشرات C.
سؤال حول GC
ماذا تعيد collectgarbage("count")؟
مراجعة: أساسيات GC في Lua
يستعيد GC التدريجي للتعليم والمسح في Lua الذاكرة غير القابلة للوصول تلقائيًا. استخدموا collectgarbage لمراقبة عملية الجمع والتحكم فيها. وقلّلوا الضغط بإعادة استخدام الجداول وتجنب التخصيصات المفرطة في المسارات المكثفة.
الأسئلة الشائعة
هل درس «أساسيات جامع البيانات المهملة في Lua» مجاني؟
نعم — نص درس «أساسيات جامع البيانات المهملة في Lua» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.
ماذا ستتعلم في «أساسيات جامع البيانات المهملة في Lua»؟
تعرّف إلى آلية عمل GC التزايدية في Lua: التعليم والمسح والحدود وcollectgarbage() تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟
لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «أساسيات جامع البيانات المهملة في Lua»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟
نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات جامع البيانات المهملة في Lua
- المفاتيح والقيم الضعيفة
- المنهيات باستخدام __gc
- تجنّب تسرّبات الذاكرة