مصطلحات كومة جافا: الأجيال الصغيرة والكبار والدائمة؟

StackOverflow https://stackoverflow.com/questions/2129044

سؤال

أحاول أن أفهم مفاهيم صغيرة, عمر او قديم و الأجيال الدائمة هي في مصطلحات كومة Java ، وبشكل أكثر تحديدا التفاعلات بين الأجيال الثلاثة.

أسئلتي هي:

  • ما هو الجيل الشاب؟
  • ما هو الجيل القديم؟
  • ما هو الجيل الدائم؟
  • كيف تتفاعل الأجيال الثلاثة/تتعلق ببعضها البعض؟
هل كانت مفيدة؟

المحلول

هذا يبدو وكأنه سوء فهم شائع. في Oracle's JVM ، الجيل الدائم ليس جزءًا من الكومة. إنها مساحة منفصلة لتعريفات الفئة والبيانات ذات الصلة. في Java 6 وما قبله ، تم تخزين السلاسل الداخلية أيضًا في الجيل الدائم. في Java 7 ، يتم تخزين السلاسل الداخلية في كومة الكائن الرئيسية.

هنا منشور جيد على جيل دائم.

أنا أحب الأوصاف المقدمة لكل مساحة في أوراكل دليل على jconsole:

بالنسبة إلى نقطة Hotspot Java VM ، فإن تجمعات الذاكرة لجمع القمامة التسلسلية هي ما يلي.

  • Eden Space (Heap): تجمع الذي يتم تخصيص الذاكرة منه في البداية لمعظم الكائنات.
  • Survivor Space (كومة): حمام السباحة الذي يحتوي على كائنات نجت من مجموعة القمامة لمساحة عدن.
  • جيل مستقل (كومة): تجمع يحتوي على أشياء موجودة لبعض الوقت في الفضاء الناجي.
  • الجيل الدائم (غير الكع): تجمع يحتوي على جميع البيانات العاكسة للجهاز الظاهري نفسه ، مثل كائنات الفئة والأسلوب. مع Java VMs التي تستخدم مشاركة بيانات الفئة ، ينقسم هذا الجيل إلى مناطق للقراءة فقط والقراءة.
  • Code Cache (Non Heap): تتضمن نقطة Hotspot Java VM أيضًا ذاكرة التخزين المؤقت للكود ، تحتوي على ذاكرة تستخدم لتجميع وتخزين التعليمات البرمجية الأصلية.

يستخدم Java مجموعة القمامة الأجيال. هذا يعني أنه إذا كان لديك كائن FOO (وهو مثيل لبعض الفصول) ، فكلما زادت أحداث جمع القمامة التي تبقى عليها (إذا كانت هناك إشارات إليها) ، فكلما زاد ترقيته. يبدأ في الجيل الشاب (الذي ينقسم نفسه إلى مساحات متعددة - عدن والناجين) وسوف ينتهي في النهاية في الجيل المُثنّع إذا نجا لفترة كافية.

نصائح أخرى

ينقسم الكومة إلى أجيال شابة وكبار على النحو التالي:

جيل الشباب : إنه المكان الذي عاش فيه لفترة قصيرة ويقسم إلى مساحتين:

  • الفضاء عدن : عندما يتم إنشاء كائن باستخدام ذاكرة الكلمات الرئيسية الجديدة المخصصة على هذه المساحة.
  • الفضاء الناجي : هذا هو التجمع الذي يحتوي على كائنات نجت بعد مجموعة جافا القمامة من Eden Space.

الجيل القديم : يحتوي هذا المسبح بشكل أساسي على مساحة مثبتة وافتراضية (محفوظة) وسيحمل تلك الأشياء التي نجت بعد جمع القمامة من الجيل الشاب.

  • المساحة المدفوعة: يحتوي تجمع الذاكرة هذا على كائنات نجت بعد جمع القمامة المتعددة يعني الكائن الذي نجا بعد جمع القمامة من Survivor Space.

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

تحديث Java8: بيرجين يتم استبداله metaspace وهو مشابه جدا.
الفرق الرئيسي هو أن MetAspace يعيد أحجام الديناميكية ، أي ، يمكن أن يتوسع في وقت التشغيل.
مساحة Java Metaspace: غير محدود (افتراضي)

كود ذاكرة التخزين المؤقت (افتراضي أو محجوز): إذا كنت تستخدم نقطة Hotspot Java VM ، فهذا يتضمن منطقة ذاكرة التخزين المؤقت للكود تحتوي على ذاكرة والتي سيتم استخدامها لتجميع وتخزين التعليمات البرمجية الأصلية.

enter image description here

كياسة

ما هو الجيل الشاب؟

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

ما هو الجيل القديم؟

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

ما هو الجيل الدائم؟

ال جيل دائم يحتوي على بيانات التعريف المطلوبة من قبل JVM لوصف الفصول والطرق المستخدمة في التطبيق. يتم ملء الجيل الدائم من قبل JVM في وقت التشغيل استنادًا إلى فئات قيد الاستخدام من قبل التطبيق.

تم استبدال Permgen بـ MetAspace منذ إصدار Java 8.

permsize و maxpermsize سيتم تجاهل المعلمات الآن

كيف تتفاعل الأجيال الثلاثة/تتعلق ببعضها البعض؟

enter image description here

مصدر الصورة و Oracle Technetwork Tutorial المقالة: http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

"عملية جمع القمامة العامة"في المقالة أعلاه تشرح التفاعلات بينها مع العديد من المخططات.

ألق نظرة على رسم تخطيطي ملخص:

enter image description here

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

يتم تنظيم الذاكرة في SunHotspot JVM في ثلاثة أجيال: الجيل الشاب ، الجيل القديم والجيل الدائم.

  • الجيل الشاب: يتم تخصيص الأشياء التي تم إنشاؤها حديثًا للجنرال الشاب.
  • الجيل القديم: إذا كان الكائن الجديد يطلب مساحة أكبر للكومة ، فسيتم تخصيصه مباشرة في الجنرال القديم. كما يتم تعزيز الأشياء التي نجت من دورات قليلة من GC إلى منزل الكائنات القديم IE Long Lived في Gen Old.
  • الجيل الدائم: يحمل الجيل الدائم أشياء يجدها JVM مريحة لإدارة جامع القمامة ، مثل الكائنات التي تصف الفئات والأساليب ، وكذلك الفئات والأساليب نفسها.

لمعلوماتك: لا يعتبر الجنرال الدائم جزءًا من كومة جافا.

كيف تتفاعل الأجيال الثلاثة/تتعلق ببعضها البعض؟يتم تخصيص الكائنات (باستثناء تلك الكبيرة) لأول مرة للجيل الشاب. إذا بقي كائن على قيد الحياة بعد x لا. من دورات جمع القمامة يتم تعزيزها إلى الجنرال القديم/المُثنّع. وبالتالي يمكننا أن نقول أن الجنرال الصغير يحتوي على الأشياء القصيرة التي لا تُعيش في حين أن الجنرال القديم يحتوي على الأشياء التي لها حياة طويلة. الجنرال الدائم لا يتفاعل مع الجيلين الآخرين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top