Java Academy · درس

أعلام ضبط GC وتحليل JVisualVM

اضبط أعلام حجم الذاكرة، وفعّل تسجيل GC، واستخدم JVisualVM لتحليل استخدام الذاكرة في تطبيق قيد التشغيل

الدرس 4 من 414 خطوة

أعلام ضبط GC وتحليل JVisualVM درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.

لماذا نضبط GC؟

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

خيارات حجم الكومة

حدّد حجم الكومة الابتدائي (-Xms) والأقصى (-Xmx). في بيئة الإنتاج، اجعلهما متساويين لتجنّب فترات التوقف الناتجة عن تغيير الحجم ديناميكيًا. ابدأ بنسبة 60-70% من ذاكرة RAM المتاحة.

// Example production flags:
java -Xms2g -Xmx2g -XX:+UseG1GC MyApp
// Avoid:
java -Xmx8g MyApp  // initial = 256m, max = 8g → resizing pauses

حجم الجيل الشاب

زِد حجم الجيل الشاب في التطبيقات كثيرة التخصيص لتقليل تكرار Minor GC. استخدم -Xmn أو -XX:NewRatio (نسبة Old:Young، والقيمة الافتراضية 2).

// Set Young Gen to 1 GB:
java -Xmx4g -Xmn1g MyApp
// Or via ratio:
java -Xmx4g -XX:NewRatio=3 MyApp  // 3GB old, 1GB young

هدف إيقاف G1 المؤقت

حدّد -XX:MaxGCPauseMillis لإبلاغ G1 بالحد الأقصى المطلوب لفترة التوقف المؤقت. يضبط G1 مجموعة التجميع الخاصة به لتحقيق الهدف — لكنه يظل هدفًا وليس ضمانًا صارمًا.

java -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xmx8g MyApp
// G1 will try to keep pauses under 100 ms

عدد خيوط GC

تحكّم في التوازي باستخدام -XX:ParallelGCThreads (خيوط إيقاف العالم) و-XX:ConcGCThreads (الخيوط المتزامنة لـ G1/ZGC).

// On an 8-core machine:
java -XX:+UseG1GC -XX:ParallelGCThreads=8 -XX:ConcGCThreads=2 MyApp

تفعيل تسجيل GC (JVM 9 فأحدث)

استخدم إطار عمل Xlog لالتقاط أحداث GC. حلّل السجلات دون اتصال لاكتشاف فترات التوقف الطويلة، وعواصف التخصيص، وإخفاقات الترقية.

java -Xlog:gc*:file=gc.log:time,uptime,level,tags:filecount=5,filesize=20m MyApp

تحذير الكائنات العملاقة

تُعدّ الكائنات الأكبر من 50% من منطقة G1 "عملاقة"، وتتجاوز الجيل الشاب وتنتقل مباشرةً إلى الجيل القديم. قد يسبب ذلك تجزئة الذاكرة. اجعل الكائنات الكبيرة أصغر أو زِد حجم المنطقة.

// Increase G1 region size (range: 1 MB to 32 MB, must be power of 2):
java -XX:+UseG1GC -XX:G1HeapRegionSize=16m -Xmx16g MyApp

نظرة عامة على JVisualVM

يوفّر JVisualVM (المضمّن مع JDK 8 والقابل للتنزيل لإصدارات JDK الأحدث) واجهة رسومية لمراقبة الكومة وGC ووحدة المعالجة المركزية والخيوط في عمليات JVM المحلية والبعيدة.

الاتصال بـ JVM بعيد

فعّل JMX على الخادم للاتصال بـ JVisualVM عن بُعد. أضف هذه الخيارات إلى بدء تشغيل JVM المستهدف.

// Remote JVM flags:
java -Dcom.sun.management.jmxremote \
     -Dcom.sun.management.jmxremote.port=9090 \
     -Dcom.sun.management.jmxremote.authenticate=false \
     -Dcom.sun.management.jmxremote.ssl=false \
     MyApp

تفريغ الكومة من JVisualVM

في JVisualVM، انقر بزر الماوس الأيمن على العملية ← "Heap Dump". يعرض التفريغ الكائنات الحية، والأحجام المحتجَزة، والمراجع. استخدم "OQL Console" للاستعلام عن التفريغ باستخدام صياغة شبيهة بـ SQL.

تحليل أداء وحدة المعالجة المركزية باستخدام JVisualVM

انتقل إلى علامة التبويب Profiler وانقر على "CPU". يضيف JVisualVM أدوات إلى الأساليب ويعرض مكدسات الاستدعاءات الأكثر نشاطًا. أوقف المحلّل لمعرفة الأساليب التي استهلكت أكبر قدر من الوقت.

مقارنة Java Flight Recorder وJVisualVM

يستهلك JFR قدرًا أقل من الموارد (~1-2%)، ولذلك يناسب بيئة الإنتاج. أما JVisualVM مع تحليل الأداء فيستهلك موارد أكثر، وهو أفضل للتطوير. استخدم JFR في الإنتاج وJVisualVM لتصحيح أخطاء التطوير.

تحقّق سريعًا

ما الخيار الذي يحدّد الحد الأقصى المستهدف لفترة توقف GC المؤقتة في G1؟

مراجعة

اضبط -Xms == -Xmx في بيئة الإنتاج. اضبط -XX:MaxGCPauseMillis لـ G1. فعّل تسجيل GC باستخدام Xlog. استخدم JVisualVM لتصحيح أخطاء التطوير وJFR لتحليل الأداء في بيئة الإنتاج.

البدء مجانًا

تعلم Java مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
104
الدروس
374

الأسئلة الشائعة

هل درس «أعلام ضبط GC وتحليل JVisualVM» مجاني؟

نعم — نص درس «أعلام ضبط GC وتحليل JVisualVM» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.

ماذا ستتعلم في «أعلام ضبط GC وتحليل JVisualVM»؟

اضبط أعلام حجم الذاكرة، وفعّل تسجيل GC، واستخدم JVisualVM لتحليل استخدام الذاكرة في تطبيق قيد التشغيل تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟

لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «أعلام ضبط GC وتحليل JVisualVM»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟

نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مناطق ذاكرة JVM ودورة حياة الكائنات
  2. خوارزميات GC: ‏Serial وG1 وZGC وShenandoah
  3. اكتشاف تسرّبات الذاكرة وإصلاحها
  4. أعلام ضبط GC وتحليل JVisualVM
← العودة إلى Java Academy