ما هو جامع القمامة جافا
يعد جامع القمامة Java أحد الوحدات الثلاث المهمة في جهاز Java Virtual Machine (JVM) (الاثنان الآخران هما المترجمين الفوريين والآليات متعددة الخيوط). يوفر للتطبيقات وظائف تخصيص الذاكرة التلقائي (تخصيص الذاكرة) ووظائف جمع الذاكرة التلقائي (جمع القمامة). تحدث كلتا العمليتين على كومة Java (قطعة من الذاكرة سريعة). في وقت معين من الزمن ، إذا كان للكائن أكثر من مرجع يشير إليه ، فإن الكائن يعيش. خلاف ذلك ، سيتم اعتباره القمامة ويمكن إعادة تدويره وإعادة استخدامه بواسطة جامع القمامة. تتطلب عمليات جمع القمامة وحدة المعالجة المركزية والموضوعات والوقت والموارد الأخرى ، لذلك من السهل أن نفهم أن عمليات جمع القمامة لا تحدث في الوقت الفعلي (يتم إصدار الكائن مباشرة بعد الموت). عند استهلاك الذاكرة أو الوصول إلى مؤشر معين (عتبة ، يتم استخدام نسبة الذاكرة إلى إجمالي الذاكرة ، مثل 0.75) ، يتم تشغيل عملية جمع القمامة. هناك استثناء لوفاة كائن. حتى إذا لم يتم الرجوع إلى كائن من النوع java.lang.thread ، طالما أن الخيط لا يزال قيد التشغيل ، فلن يتم إعادة تدويره.
آلية إعادة التدوير
وفقًا للتحليل الإحصائي ، فإن معظم الكائنات في Java (بما في ذلك بعض اللغات الأخرى عالية المستوى) لها دورات حياة قصيرة ، لذلك تتم إدارة ذاكرة Java بأجيال. الغرض من تقسيم الأجيال ليس أكثر من استخدام استراتيجيات إدارة مختلفة (خوارزميات) لكتل الذاكرة من الأجيال المختلفة لزيادة الأداء. بالمقارنة مع الجيل الأكبر سناً ، يكون الجيل الأصغر سناً أصغر بكثير ، وتردد إعادة التدوير مرتفع والسرعة سريعة. كبار السن لديهم تردد إعادة التدوير منخفض ويستغرق وقتا طويلا. يتم توزيع الذاكرة في الجيل الشاب. سيتم ترقية الكائنات في الجيل الشاب تلقائيًا إلى الجيل القديم بعد دورات إعادة التدوير المتعددة.
خيارات التصميم
يؤثر اختيار التصميم على صعوبة تنفيذ جامع JVM Garbage Collector ومؤشرات أداء JVM ، وهو مناسب لسيناريوهات مختلفة. يصف خصائص نمط خوارزمية إعادة التدوير.
إعادة تدوير التسلسل المفرد مقابل إعادة التدوير المتوازي متعدد الخيوط
تتم معالجة مسألة ما إذا كانت عملية إعادة التدوير نفسها تتم معالجتها بواسطة مؤشرات ترابط متعددة. تتمثل مزايا إعادة التدوير في المواعيد الواحدة إلى أنها بسيطة وسهلة التنفيذ ، مع شظايا قليلة ، وهي مناسبة للآلات ذات النواة الواحدة. يمكن لإعادة التدوير المتوازي متعدد الخيوط استخدام موارد وحدة المعالجة المركزية بالكامل على الآلات متعددة النواة ، وتقليل وقت إعادة التدوير وزيادة الإنتاجية. العيب هو أنه معقد وقد لا يتم إعادة تدوير بعض الأجزاء.
وقفة التطبيق مؤشر ترابط التطبيق أثناء إعادة التدوير مقابل إعادة التدوير والتطبيق المتزامن
إصدار ما إذا كان لإيقاف مؤشر ترابط التطبيق أثناء عملية إعادة التدوير. تتمثل مزايا مؤشرات ترابط التطبيق التوقف في أنها بسيطة ودقيقة وتنظيفها نظيفة نسبيًا وتنظيفها لفترة قصيرة (باستثناء موارد وحدة المعالجة المركزية). العيب هو أن مؤشرات ترابط التطبيق التوقف سوف تتسبب في تمديد وقت استجابة التطبيق خلال دورة جمع القمامة ، وأن الأنظمة ذات الأداء العالي في الوقت الفعلي للغاية أكثر حساسية. تتمثل مزايا المعالجة المتوازية لإعادة التدوير والتطبيق في أن وقت تفاعل التطبيق مستقر نسبيًا ، وأن العيوب هي أنه من الصعب تحقيق وتيرة التنظيف العالية ، وتفتت محتمل.
قم بإلغاء شظايا الذاكرة المحررة مقابل دمج شظايا الذاكرة المحررة مقابل نسخ The Alive إلى مكان جديد
تصف هذه الخيارات الثلاثة كيفية إدارة شظايا كتلة الذاكرة الميتة. عادة ما تنتشر شظايا الذاكرة الميتة في كل مكان في الكومة. إذا لم تتم إدارتها ، فستكون هناك مشكلتان. عندما يكون تخصيص الذاكرة بطيئًا بسبب إيجاد الذاكرة المتاحة ، ستؤدي الشظايا الصغيرة إلى نفايات الذاكرة (مثل المصفوفات الكبيرة تتطلب شظايا ذاكرة مستمرة كبيرة). هناك طريقتان لإدارة: انقل الذاكرة المعيشية إلى أحد طرفي كتلة الذاكرة ، وتسجيل موضع البداية للذاكرة المتاحة ، أو ببساطة نسخ الذاكرة المعيشية إلى منطقة ذاكرة جديدة ، وكتلة الذاكرة الأصلية فارغة تمامًا.
مقاييس الأداء
①. الإنتاجية (الإنتاجية)
نسبة الوقت غير الاسترداد لإجمالي الوقت خلال فترة أطول (فترات طويلة فقط ذات معنى). قياس كفاءة التشغيل للنظام.
②. جمع القمامة النفقات العامة
نسبة وقت الاسترداد لإجمالي الوقت على مدى فترة أطول. المقابلة للإنتاجية ، مجموع المجموع 100 ٪.
③. وقفة الوقت
عندما تقوم Java Virtual Machines بإعادة تدوير القمامة ، ستقوم بعض الخوارزميات بإيقاف تنفيذ جميع مؤشرات ترابط التطبيق ، وقد تكون بعض الأنظمة حساسة للفاصل الزمني للتوقف.
④. تواتر التجميع
كم من الوقت يستغرق التعافي؟
⑤. حجم استخدام الذاكرة (البصمة)
مثل حجم الكومة.
⑥. الوقت الحقيقي (السريع)
كم من الوقت يستغرق إعادة تدوير كائن ما من الكائن؟
أنواع جمع القمامة
تعتمد جميع أنواع إعادة التدوير على تقنية الأجيال. يشتمل جهاز Java Hotspot Virtual Machine على ثلاثة أجيال ، الجيل الشاب ، الجيل القديم ، والجيل الدائم.
جيل جيل
يخزن الفصول والأساليب ومعلومات الوصف. يمكن تحديد الحجم الأولي والقيمة القصوى من خلال الخيارين الاختياريين -xx: permsize = 64m و -xx: maxpermsize = 128m. عادةً ما لا نحتاج إلى ضبط هذه المعلمة ، يكون حجم التوليد الدائم الافتراضي كافيًا ، ولكن إذا كان هناك الكثير من الفئات المحملة وليس كافية ، فقط اضبط القيمة القصوى.
② الجيل الأكبر سنا
لا تزال كائنات التخزين الرئيسية في الجيل الشاب والتي لا تزال البقاء على قيد الحياة والترقية بعد دورات إعادة التدوير المتعددة على قيد الحياة. بالطبع ، بالنسبة لبعض مخصصات الذاكرة الكبيرة ، قد يتم تخصيصها مباشرة للجيل الدائم (مثال متطرف هو أن الجيل الشاب لا يمكن أن ينقذ على الإطلاق).
③young جيل
تحدث معظم إجراءات تخصيص الذاكرة وإعادة التدوير في الأجيال الشابة. كما هو مبين في الشكل أدناه ، ينقسم الجيل الشاب إلى ثلاث مناطق ، والمنطقة الأصلية (عدن) واثنين من منطقتي البقاء الصغيرة (الناجين). تنقسم منطقتي البقاء على قيد الحياة من من وإلى حد وظائفهما. يتم تخصيص معظم الأشياء في المنطقة الأصلية ، ولا تزال هناك أكثر من عملية جمع القمامة في منطقة المعيشة.
جامع التسلسل
يقوم مؤشر ترابط واحد بإجراء عملية إعادة التدوير ، ويقوم بتعليق تنفيذ جميع مؤشرات ترابط التطبيق خلال فترة إعادة التدوير. يتم إجبار Recycler الافتراضي في وضع العميل على تحديد خيار سطر أوامر useRialGC -xx:+useRialGC.
مجموعة Minor للأجيال الصغيرة
نقل الأشياء الباقية في منطقة عدن إلى إلى المنطقة. إذا كان لا يمكن تثبيت المنطقة ، فانتقل مباشرة إلى الجيل القديم. إذا لم يكن من الممكن تثبيت المنطقة من المنطقة ، فانتقل مباشرة إلى الجيل القديم. إذا كانت المنطقة قديمة جدًا ، فقم بالترقية إلى الجيل القديم. بعد اكتمال إعادة التدوير ، يكون كل من عدن ومناطق فارغة. في هذا الوقت ، يتم تغيير وظائف من وإلى إلى إلى إلى ، ومن بينها إلى إلى ، وإلى أن تكون فارغة قبل كل جولة من إعادة التدوير. اختيار التصميم هو النسخ المتماثل.
② خوارزمية إعادة التدوير للمسنين (المجموعة الكاملة)
تنقسم إعادة تدوير كبار السن إلى ثلاث خطوات: علامة ، اكتساح ، ودمج. تمثل مرحلة العلامات جميع الأشياء الباقية على قيد الحياة ، وتطلق مرحلة المقاصة جميع الأشياء الميتة ، وتدمج مرحلة الدمج جميع الأشياء الباقية على قيد الحياة في الجزء السابق من الجيل القديم ، تاركة جميع الشظايا الحرة وراءها. اختيار التصميم هو دمج لتقليل تجزئة الذاكرة.
جامع موازي
استخدم مؤشرات ترابط متعددة لأداء جمع القمامة في نفس الوقت. يمكن للبيئة متعددة النواة استخدام موارد وحدة المعالجة المركزية بالكامل ، وتقليل وقت إعادة التدوير ، وزيادة إنتاجية JVM ، وإعادة التدوير الافتراضي في وضع الخادم. مثل إعادة التسلسل التسلسلي ، يتم تعليق تنفيذ جميع مؤشرات ترابط التطبيق أثناء إعادة التدوير. أجبر على التحديد عبر خيار سطر أوامر usexx:+useparallegc.
مجموعة Minor للأجيال الصغيرة
تُستخدم خيوط متعددة لإعادة تدوير القمامة ، وخوارزمية كل مؤشر ترابط هي نفس صورة إعادة التسلسل.
② خوارزمية إعادة التدوير للمسنين (المجموعة الكاملة)
لا يزال الجيل الأكبر سناً متاحًا له ، وهو نفسه إعادة التسلسل.
مجموعة متوازية
تتم معالجة إعادة تدوير الجيل الأصغر سناً والجيل الأكبر سناً عن طريق متعدد الخيوط. المحدد بواسطة خيار الأمر -xx:+upedaralloldgc ، xx: parallelgCthreads = 3 يمكن أن يحدد عدد مؤشرات الترابط المشاركة في إعادة التدوير المتوازي. مثل إعادة التسلسل التسلسلي ، يتم تعليق تنفيذ جميع مؤشرات ترابط التطبيق أثناء إعادة التدوير. مقارنة مع إعادة التدوير المتوازية ، فإن الجيل الأكبر سنا لديه وقت لإعادة التدوير أقصر ، وبالتالي تقليل وقت الإيقاف المؤقت. أجبر على التحديد عبر خيار سطر أوامر UpedParalleloldGC.
مجموعة Minor للأجيال الصغيرة
نفس جامع متوازي
② خوارزمية إعادة التدوير للمسنين (المجموعة الكاملة)
يتم تقسيم كبار السن إلى ثلاث خطوات: وضع العلامات والعد والاندماج. يتم استخدام فكرة التقسيم هنا ، ويتم تقسيم الجيل القديم إلى العديد من المناطق ذات الحجم الثابت. في مرحلة العلامات ، تنقسم جميع الأشياء الباقية إلى مجموعات N (يجب أن يكون عدد الخيوط المعاد تدويرها هو نفس عدد الخيوط المعاد تدويرها). كل مؤشر ترابط مسؤول بشكل مستقل عن مجموعته الخاصة ، ويمثل موقع الكائنات الباقية ومعلومات معدل البقاء على قيد الحياة في المنطقة (المنطقة) ، ووضع علامات عليها على أنها موازاة. في المرحلة الإحصائية ، يتم حساب معدل البقاء على قيد الحياة لكل منطقة. من حيث المبدأ ، معدل البقاء في المقدمة مرتفع نسبيا. من الأمام إلى الخلف ، يتم العثور على موضع البداية الذي يستحق الاندماج (المناطق التي تبقى فيها معظم الكائنات لا تستحق الدمج). المرحلة الإحصائية هي التسلسلية (موضوع واحد). في مرحلة الدمج ، استنادًا إلى المعلومات الواردة في المرحلة الإحصائية ، نسخ مؤشرات الترابط المتعددة الكائنات الباقية من منطقة إلى منطقة أخرى بالتوازي.
جامع مارك سويك المتزامن
يُعرف التطبيق أيضًا باسم جامع الانتشار المنخفض ، وتم تعليق التطبيق لفترة أقصر من خلال وسائل مختلفة. ينفذ عمليات إعادة التدوير بشكل أساسي مع التطبيق ، دون دمج ونسخ العمليات. تم تحديده من خلال سطر الأوامر -xx:+useconcmarksweepgc ، يمكنك أيضًا تحديد استخدام وضع إعادة التدوير التزايدي -xx:+UseconCmarksWeepGC في أنظمة أحادية النواة أو ثنائية النواة. تشير إعادة التدوير التدريجي إلى تقسيم عملية إعادة التدوير إلى شظايا متعددة ، وتنفيذ جزء واحد وإطلاق موارد وحدة المعالجة المركزية للتطبيق ، ثم الاستمرار في إعادة تدوير النتيجة الأخيرة في نقطة معينة في المستقبل. والغرض هو أيضا لتقليل التأخير.
مجموعة Minor للأجيال الصغيرة
نفس جامع متوازي
② خوارزمية إعادة التدوير للمسنين (المجموعة الكاملة)
وهي مقسمة إلى أربع خطوات: العلامة الأولية ، العلامة المتزامنة ، الملاحظة ، والكتابة المتزامنة. إيلاء اهتمام خاص ، لا توجد عملية دمج ، لذلك ستكون هناك شظايا.
أداة تقييم الأداء لجامعة Java Garbage Collector
①xx:+printgcdetails و xx:+printgctimestamps
معلومات عن وقت البدء ، والمدة ، وذاكرة احتياطية لكل جيل ، إلخ.
②jmap [خيارات] PID
Jamp 2043 عرض الكائنات المشتركة التي تم تحميلها في عملية 2043. عادة ملفات DLL.
JMAP -HEAP 2043 تحقق من معلومات التكوين واستخدام كومة الذاكرة.
JMAP -Permstat 2043 تحقق من حالة تحميل الجيل الدائم.
JMAP -HISTO 2043 تحقق من تحميل واستخدام الذاكرة للفصل.
③jstat [خيارات] PID
JSTAT -Lass 2043 تحميل فئة ، تفريغ ، استخدام الذاكرة.
JSTAT -GC 2043 GC حالة تنفيذ.
PostScript
يوفر Java وظائف التحديد التلقائي والتحسين الأداء التلقائي. قبل القيام بضبط جامع القمامة ، قم أولاً بإدراج مؤشرات الأداء التي تشعر بالقلق بشأنها ، وأخبر JVM مؤشرات الأداء التي تهتم بها من خلال سطر الأوامر ، وضبطها تلقائيًا بواسطة JVM. إذا لم تكن راضيًا ، فيمكنك تحديد جامع القمامة. عادة ما يكون OutofMemory بسبب عدم كفاية ذاكرة الكومة ، بحيث يمكنك ضبط -xmx1024m و -xx: maxpermsize = 128m.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.