0Pricing
Kotlin Academy · درس

إدارة الذاكرة في Kotlin/Native: مدير الذاكرة الجديد

استكشف مدير الذاكرة الجديد في Kotlin/Native وجامع البيانات المهملة وملكية الكائنات

إدارة الذاكرة في Kotlin/Native: مدير الذاكرة الجديد درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.

مشكلة نموذج الذاكرة القديم

كان نموذج الذاكرة الأصلي في Kotlin/Native، قبل الإصدار 1.7.20، يتبع مبدأ «غير قابلة للتغيير افتراضياً»: إذ كان يجب تجميد الكائنات قبل عبورها حدود الخيوط. جعل ذلك الشفرة متعددة الخيوط معقدة، كما جعلها غير متوافقة مع دلالات coroutines في Kotlin.

مدير الذاكرة الجديد (1.7.20 فأحدث)

منذ Kotlin 1.7.20، تستخدم Kotlin/Native نموذج ذاكرة جديداً يعتمد على جامع القمامة، ويحاكي سلوك JVM وJS. ويُسمح افتراضياً بتعديل الكائنات عبر الخيوط. أما واجهات freeze() وisFrozen فقد أصبحت مهجورة ولا تنفذ أي إجراء.

تصميم جامع القمامة

يستخدم مدير الذاكرة الجديد جامع قمامة من نوع إيقاف العالم مع التعليم والمسح، ويعمل على خيط جامع قمامة منفصل. ويهدف إلى تقليل أوقات التوقف إلى أدنى حد، ويعمل بصورة تدريجية. وستواصل الإصدارات المستقبلية تحسين استراتيجية جامع القمامة.

Coroutines ومدير الذاكرة الجديد

مع مدير الذاكرة الجديد، تعمل kotlinx.coroutines في Kotlin/Native بالطريقة نفسها التي تعمل بها على JVM. ويمكنك مشاركة الحالة القابلة للتغيير بين coroutines باستخدام الأنماط نفسها، مثل حقل قابل للتغيير محمي بواسطة Mutex، من دون تجميد.

val mutex = Mutex()
var counter = 0

suspend fun increment() = mutex.withLock { counter++ }

أمان الخيوط في مدير الذاكرة الجديد

لا يوفر مدير الذاكرة الجديد أماناً تلقائياً للخيوط؛ فما زلت بحاجة إلى مزامنة الحالة المشتركة القابلة للتغيير يدوياً باستخدام Mutex أو AtomicInt أو AtomicReference، أو إلى حصر الحالة في خيط واحد عبر موزعات coroutines.

العمليات الذرية في Kotlin/Native

استخدم kotlin.native.concurrent.AtomicInt وAtomicLong وAtomicReference لإجراء عمليات ذرية خالية من الأقفال على القيم البدائية والمراجع:

val counter = AtomicInt(0)
fun increment() { counter.increment() }
fun read(): Int = counter.value

دورة حياة الكائنات وARC على أهداف Apple

على منصات Apple، مثل iOS وmacOS، تستخدم Kotlin/Native تقنية ARC، أي عدّ المراجع التلقائي، للتشغيل التبادلي مع كائنات Objective-C. وتُدار الكائنات التي تملكها Kotlin بواسطة جامع القمامة، بينما تُمرر كائنات ObjC وSwift إلى Kotlin عبر أغلفة متوافقة مع ARC.

تسربات الذاكرة: ما يجب مراقبته

تشمل مشكلات الذاكرة الشائعة في Native دورات الاحتفاظ المرجعي بين كائنات Kotlin ومفوضي أو عمليات الإغلاق في ObjC، ورسوم الكائنات الكبيرة التي لا يتم تحريرها بعد الاستخدام، وعمال الخلفية طويلي العمر الذين يحتفظون بمراجع إلى كائنات واجهة المستخدم. استخدم Xcode Instruments لتحليل الأداء على أهداف Apple.

خيوط العمل في الخلفية

استخدم kotlin.native.concurrent.Worker للخيوط العاملة في الخلفية على مستوى المنصة، أو فضّل coroutines مع موزع أصلي. يملك كل Worker حلقة أحداث خاصة به، ويتم التواصل عبر execute() الذي ينقل الكائنات أو يشاركها وفقاً لقواعد مدير الذاكرة الجديد.

الترحيل من مدير الذاكرة القديم

أزل جميع الاستدعاءات إلى freeze() وensureNeverFrozen() وisFrozen. واستبدل الحلول الالتفافية باستخدام AtomicReference بخصائص قابلة للتغيير عادية تحميها Mutex عند الحاجة. حدّث kotlinx.coroutines إلى الإصدار 1.6.4 أو أحدث لدعم مدير الذاكرة الجديد.

ضبط جامع القمامة

يمكن ضبط جامع القمامة عبر خصائص النظام أو خيارات الملفات الثنائية في Kotlin/Native. وبالنسبة إلى التطبيقات الحساسة لزمن الاستجابة، جرّب kotlin.native.gc.collectIntervalMillis. أما في الأجهزة محدودة الذاكرة، فقلّل حجم الكومة باستخدام kotlin.native.gc.heapTriggerCoefficient.

اختبار سريع

ما التغيير الأساسي الذي أدخله مدير الذاكرة الجديد في Kotlin/Native، بدءاً من الإصدار 1.7.20؟

مراجعة: إدارة الذاكرة في Kotlin/Native

أهم النقاط:

  • مدير الذاكرة الجديد، بدءاً من 1.7.20: تُدار الذاكرة بواسطة جامع القمامة، ويمكن مشاركة الكائنات القابلة للتغيير عبر الخيوط، وأصبح freeze() بلا تأثير
  • ما زلت بحاجة إلى مزامنة يدوية باستخدام Mutex وAtomicInt وAtomicReference
  • تستخدم أهداف Apple تقنية ARC للتشغيل التبادلي مع ObjC، بينما تُدار كائنات Kotlin بواسطة جامع القمامة
  • تعمل coroutines بالطريقة نفسها التي تعمل بها على JVM في مدير الذاكرة الجديد
  • أزل استدعاءات freeze() القديمة عند الترحيل إلى مدير الذاكرة الجديد

الأسئلة الشائعة

هل درس «إدارة الذاكرة في Kotlin/Native: مدير الذاكرة الجديد» مجاني؟

نعم — نص درس «إدارة الذاكرة في Kotlin/Native: مدير الذاكرة الجديد» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.

ماذا ستتعلم في «إدارة الذاكرة في Kotlin/Native: مدير الذاكرة الجديد»؟

استكشف مدير الذاكرة الجديد في Kotlin/Native وجامع البيانات المهملة وملكية الكائنات تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟

لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «إدارة الذاكرة في Kotlin/Native: مدير الذاكرة الجديد»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟

نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. نظرة عامة على Kotlin/Native: الأهداف وسلسلة الأدوات والترجمة
  2. إدارة الذاكرة في Kotlin/Native: مدير الذاكرة الجديد
  3. التكامل مع C باستخدام cinterop وملفات .def
  4. Kotlin/WASM: الترجمة إلى WebAssembly للمتصفح
← العودة إلى Kotlin Academy