logo

المكدس مقابل كومة جافا

في جافا، إدارة الذاكرة هي عملية حيوية. تتم إدارته بواسطة Java تلقائيًا. يقسم JVM الذاكرة إلى قسمين: كومة الذاكرة وذاكرة الكومة. من وجهة نظر Java، كلاهما مناطق مهمة للذاكرة ولكن كلاهما يستخدم لأغراض مختلفة. ال الفرق الرئيسي بين ذاكرة المكدس وذاكرة الكومة هو أن المكدس يستخدم لتخزين ترتيب تنفيذ الطريقة والمتغيرات المحلية بينما تقوم ذاكرة الكومة بتخزين الكائنات وتستخدم تخصيص الذاكرة الديناميكية وإلغاء التخصيص. في هذا القسم، سنناقش الاختلافات بين المكدس والكومة بالتفصيل.

المكدس مقابل كومة جافا

كومة الذاكرة

ذاكرة المكدس هي مساحة فعلية (في ذاكرة الوصول العشوائي) مخصصة لكل مؤشر ترابط في وقت التشغيل. يتم إنشاؤه عندما يتم إنشاء موضوع. تتبع إدارة الذاكرة في المكدس ترتيب LIFO (آخر دخل أولاً يخرج) لأنه يمكن الوصول إليه عالميًا. يقوم بتخزين المتغيرات والمراجع إلى الكائنات والنتائج الجزئية. الذاكرة المخصصة لتكديس الحياة حتى تعود الوظيفة. إذا لم يكن هناك مساحة لإنشاء الكائنات الجديدة، فسيتم طرح الملفjava.lang.StackOverFlowError. نطاق العناصر يقتصر على المواضيع الخاصة بهم. ال JVM يقوم بإنشاء مكدس منفصل لكل موضوع.

ذاكرة كومة

يتم إنشاؤه عند بدء تشغيل JVM واستخدامه بواسطة التطبيق طالما أن التطبيق يعمل. يقوم بتخزين الكائنات وفئات JRE. عندما نقوم بإنشاء كائنات فإنها تشغل مساحة في ذاكرة الكومة بينما يتم إنشاء مرجع ذلك الكائن في المكدس. لا يتبع أي ترتيب مثل المكدس. يتعامل بشكل حيوي مع كتل الذاكرة. وهذا يعني أننا لا نحتاج إلى التعامل مع الذاكرة يدويًا. لإدارة الذاكرة تلقائيا، جافا يوفر أداة تجميع البيانات المهملة التي تحذف الكائنات التي لم تعد مستخدمة. تستمر الذاكرة المخصصة للكومة حتى يحدث أي حدث واحد، سواء تم إنهاء البرنامج أو عدم حدوث ذاكرة فارغة. العناصر يمكن الوصول إليها عالميًا في التطبيق. إنها مساحة ذاكرة مشتركة مشتركة مع جميع المواضيع. إذا كانت مساحة الكومة ممتلئة، فإنه يرميjava.lang.OutOfMemoryError. يتم تقسيم ذاكرة الكومة أيضًا إلى مناطق الذاكرة التالية:

  • جيل الشباب
  • مساحة الناجين
  • الجيل القديم
  • جيل دائم
  • ذاكرة التخزين المؤقت للكود

توضح الصورة التالية تخصيص ذاكرة المكدس ومساحة الكومة.

المكدس مقابل كومة جافا

الفرق بين ذاكرة المكدس وذاكرة الكومة

يلخص الجدول التالي كافة الاختلافات الرئيسية بين ذاكرة المكدس ومساحة الكومة.

معامل كومة الذاكرة مساحة كومة
طلب يقوم بتخزين العناصر التي لها عمر قصير جدًا مثل الأساليب والمتغيرات و المتغيرات المرجعية من الكائنات. يخزن أشياء وبيئة تشغيل جافا ( جي آر إي ) الطبقات.
الطلب ويتبع ليفو طلب. لا يتبع أي ترتيب لأنه تخصيص ديناميكي للذاكرة وليس لديه أي نمط ثابت لتخصيص وإلغاء تخصيص كتل الذاكرة.
المرونة إنها غير مرن لأننا لا نستطيع تغيير الذاكرة المخصصة. إنها مرن لأنه يمكننا تغيير الذاكرة المخصصة.
كفاءة لقد أسرع الوصول والتخصيص والتخصيص. لقد أبطأ الوصول والتخصيص والتخصيص.
حجم الذاكرة إنها الأصغر في الحجم. إنها أكبر في الحجم.
خيارات جافا المستخدمة يمكننا زيادة حجم المكدس باستخدام خيار JVM -Xss. يمكننا زيادة أو تقليل حجم ذاكرة الكومة باستخدام خيارات - Xmx و -Xms JVM.
الرؤية أو النطاق المتغيرات مرئية فقط لمؤشر الترابط المالك. وهو مرئي لجميع المواضيع.
جيل الفضاء عند إنشاء مؤشر ترابط، يقوم نظام التشغيل تلقائيًا بتخصيص المكدس. لإنشاء مساحة الكومة للتطبيق، تقوم اللغة أولاً باستدعاء نظام التشغيل في وقت التشغيل.
توزيع يتم إنشاء مكدس منفصل لكل كائن. وهي مشتركة بين جميع المواضيع.
رميات الاستثناء JVM يلقي java.lang.StackOverFlowError إذا كان حجم المكدس أكبر من الحد. لتجنب هذا الخطأ، قم بزيادة حجم المكدس. JVM يلقي java.lang.OutOfMemoryError إذا كان JVM غير قادر على إنشاء طريقة أصلية جديدة.
التخصيص/ التخصيص يتم ذلك تلقائيًا بواسطة مترجم . يتم ذلك يدويًا بواسطة مبرمج .
يكلف تكلفتها هي أقل . تكلفتها هي أكثر بالمقارنة مع المكدس.
تطبيق تنفيذها هو صعب . تنفيذها هو سهل .
ترتيب التخصيص تخصيص الذاكرة هو مستمر . الذاكرة المخصصة في عشوائي طلب.
سلامة الموضوع إنه آمن للخيط لأن كل خيط له مكدس خاص به. إنه ليس آمنًا لمؤشر الترابط، لذا يلزم مزامنة التعليمات البرمجية بشكل صحيح.