الذاكرة في لغة البرمجة جافا – Memory in Java Programming Language:

عند البدء بتشغيل برنامج مكتوب بلغة البرمجة جافا (Java) تقوم آلة جافا الافتراضية (JVM) بحجز مساحة من الذاكرة ليتم استخدامها ويتم تقسم هذه المساحة إلى عدة أقسام يتم تخزين في كل جزء بيانات معينة، وتقوم آلة جافا الافتراضية بإدارة بعض الأقسام  عند الحاجة لتخزين بيانات جديدة، وتسمى عملية تقسيم الذاكرة بـ (Memory allocation).

أقسام الذاكرة في لغة البرمجة جافا:

 

آلة جافا الافتراضية تقسم الذاكرة عند تنفيذ برنامج مكتوب بلغة البرمجة جافا  إلى ذاكرة (Heap) وذاكرة (Stack)، وفيما يلي هذه الأقسام.

 

المساحة Heap في لغة جافا:

تقوم هذه المساحة بتخزين جميع الكائنات التي يتم إنشاؤها في البرنامج المكتوب بلغة جافا،  وعندما تمتلئ مساحة (Heap) تقوم آلة جافا الافتراضية بتشغيل جامع القمامة (Garbage Collector)، والذي يستخدم لتنظيف الكائنات التي لم يعد البرنامج بحاجتها، وذلك حتى يتمكن البرنامج من تخزين كائنات جديدة، وعندما لا يجد جامع القمامة ما يمكن إزالته من الكائنات يحاول توسيع مساحة ذاكرة الـ (Heap)، ولكن مع مراعاة أن هناك مساحة كُبرى لا يمكنه تجاوزها، وفي حال تم تجاوزها ستطلق آلة جافا الافتراضية حينها الخطأ  (OutOfMemoryError).

المساحة Stack:

 

يتم تنفيذ كود البرنامج المكتوب بلغة البرمجة جافا دائما داخل ما يسمى ب (Threads)، وتقوم آلة جافا الافتراضية بتشغيل (Thread) واحد أو أكثر أثناء عمل البرنامج، وعند تشغيل البرنامج تقوم آلة جافا الافتراضية بداية بتشغيل أول (Thread) ويُسمى (Main Thread)، وكل (Thread) يتم إنشاؤه يتم تخصيص مساحة له تسمى (Stack) وفيها يتم حفظ البيانات الخاصة بكل دالة نقوم باستدعائها بداخله.

 

المساحة Metaspace:

 

هي مساحة في الذاكرة يتم تخزين الحقول الثابتة من نوع (static) بالإضافة للبيانات عن الكلاسات (classes) التي يتم تحميلها و الدوال الخاصة بهم أيضاً، وفي الإصدار (8) من لغة جافا ظهر هذا القسم من الذاكرة ليستبدل القسم القديم (Permanent Generation) المحدود الذاكرة.

 

والذي يعرف باختصار (PermGen) الذي كان يتسبب بالخطأ (OutOfMemoryError) عندما يمتلئ في البرامج التي تحتاج لتحميل عدد كبير من الكلاسات، ومساحة (Metaspace) لها العديد من المزايا أهمها قابلية التوسعة، بالإضافة إلى أن جامع القمامة أصبح يستطيع تأدية عمله بإزالة الكلاسات غير المستخدمة من الذاكرة بشكل أفضل.