سؤال

أنا في حيرة من أمري مع كومة ، شابة ، مثبتة وتوليد بيرم.

هل يمكن لأي شخص أن يشرح؟

هل كانت مفيدة؟

المحلول

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

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

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

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

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

نصائح أخرى

ذاكرة كومة جافا هو جزء من الذاكرة المخصصة لـ JVM بواسطة نظام التشغيل. كلما أنشأنا كائنات يتم إنشاؤها في الداخل كومة في جافا.

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

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

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

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

بيرجين تم استبداله بـ metaspace منذ إصدار Java 8. permsize و maxpermsize سيتم تجاهل المعلمات الآن. ألق نظرة على هذا مقال dzone بواسطة بيير - Hugues Charbonneau لفهمه عن Metaspace.

enter image description here

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

الرجوع إلى نفس المقالة لمزيد من التفاصيل.

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

Permgen ، الشباب والمستثنقة هي صراخ مختلف للكائنات (أو المسافات في الكومة حيث يمكن أن تكون).

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

صغيرة: عند إنشاء كائن ، يكون هنا.

ثني: ينتقل كائن إلى هذا التصنيف/الفئة عندما يمر N GC (تمرير Survive = GC ولكن يتم الرجوع إلى هذا الكائن بحيث لا يمكن استرداده).

اعتمادًا على GC المستخدم وبعض المعايير ، يمر GC في كثير من الأحيان أو أقل.

ثم يمكن أن يكون لجمع القمامة مقاربات مختلفة للكائنات المانغ في الكومة. هذا التصنيف من الكائنات يساعد على القيام بذلك.

إليك مقالة أخرى ممتازة (رغم أنها طويلة) حول كيفية ضبط/حجم معلمات GC الخاصة بك ، والتي قد تساعدك على فهم المزيد:

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/

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

إذا كنت ترغب في ربط المراقبة عن بُعد لنظام التشغيل لرؤية استخدام ذاكرة الوقت الحقيقي و GC يعمل على التحقق من هذه الأداة:

http://java.sun.com/performance/jvmstat/visualgc.html

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