0Pricing
Java Academy · درس

أعلام ضبط JVM الشائعة

خيارات الكومة وGC وJIT

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

لماذا نضبط JVM؟

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

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

حجم الكومة: -Xms و-Xmx

يضبط الخياران الأكثر شيوعًا حدود الكومة:

  • -Xms — حجم الكومة الابتدائي.
  • -Xmx — الحد الأقصى لحجم الكومة.

مثال: java -Xms512m -Xmx2g MyApp. إن ضبط -Xms مساويًا لـ -Xmx يتجنب توقفات تغيير الحجم في الخوادم طويلة التشغيل.

قراءة الإعدادات الافتراضية

يمكنكم سؤال JVM عن الإعداد الذي اختاره. يعرض Runtime أرقام الكومة الحالية، بينما يفرغ -XX:+PrintFlagsFinal القيمة الفعلية لكل خيار.

يطبع المثال حدود الذاكرة الخاصة بـ JVM قيد التشغيل.

public class Main {
    public static void main(String[] args) {
        Runtime rt = Runtime.getRuntime();
        long mb = 1024 * 1024;
        System.out.println("Max heap (Xmx): " + (rt.maxMemory() / mb) + " MB");
        System.out.println("Total heap now: " + (rt.totalMemory() / mb) + " MB");
        System.out.println("Free in heap: " + (rt.freeMemory() / mb) + " MB");
        System.out.println("Available cores: " + rt.availableProcessors());
    }
}

اختيار جامع البيانات المهملة

توفر JDK الحديثة عدة جامعات للبيانات المهملة:

  • -XX:+UseG1GC — الافتراضي؛ متوازن وقائم على المناطق.
  • -XX:+UseZGC — توقفات فائقة الانخفاض، للكومات الكبيرة.
  • -XX:+UseParallelGC — إنتاجية قصوى، مع توقفات أطول.
  • -XX:+UseSerialGC — أحادي الخيط، للتطبيقات والحاويات الصغيرة.

هدف توقف G1

إن G1 جامع موجّه نحو زمن التوقف. تمنحونه هدفًا ويحاول تحقيقه:

  • -XX:MaxGCPauseMillis=200 يطلب من G1 إبقاء فترات التوقف قريبة من 200 مللي ثانية.

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

استخدام ZGC لزمن استجابة منخفض

عندما يجب أن تظل فترات التوقف أقل من ميلي ثانية حتى مع كومات بحجم عدة غيغابايت، استخدموا ZGC مع -XX:+UseZGC.

ينفذ معظم عمله بالتزامن مع خيوط التطبيق. والمقابل هو استهلاك إضافي لبعض CPU والذاكرة مقارنةً بـ G1. وهو مثالي للخدمات الحساسة لزمن الاستجابة.

تسجيل GC

لضبط GC، يجب أن تروه. فعّلوا التسجيل الموحد:

  • -Xlog:gc*:file=gc.log:time,uptime,level,tags

يسجل هذا كل عملية جمع مع الطوابع الزمنية والمدد. مرروا السجل إلى عارض (أو إلى JMC/JFR) لاكتشاف فترات التوقف الطويلة أو المتكررة قبل تغيير أي خيار.

الحاويات وCPU

يقرأ JVM داخل الحاويات حدود cgroup. ويستخدم افتراضيًا نسبة من حد الذاكرة لحجم الكومة.

  • -XX:MaxRAMPercentage=75.0 يضبط الكومة كنسبة مئوية من ذاكرة الحاوية.
  • -XX:ActiveProcessorCount=N يتجاوز عدد وحدات CPU المكتشف.

يمنع هذا تخصيص ذاكرة أكبر من اللازم، ما قد يدفع المنسّق إلى إنهاء العملية.

أعلام JIT والتشخيص

بعض الأعلام المفيدة الإضافية:

  • -XX:+HeapDumpOnOutOfMemoryError — تفريغ الذاكرة المؤقتة عند حدوث OOM لإجراء تحليل ما بعد العطل.
  • -XX:HeapDumpPath=/tmp — تحديد المكان الذي يُكتب فيه التفريغ.
  • -XX:+PrintCompilation — عرض نشاط ترجمة JIT.

تكلفة هذه الأعلام منخفضة، لكنها تكون مفيدة عند حدوث مشكلة.

انضباط الضبط

القواعد الذهبية للتعامل مع الأعلام:

  • غيّر علمًا واحدًا في كل مرة، ثم أعد القياس بالمقارنة مع خط أساس.
  • لا تنسخ الأعلام بشكل أعمى من منشورات المدونات؛ فقد تكون موجهة إلى JVM قديمة.
  • تحتاج معظم التطبيقات إلى -Xmx فقط، وربما إلى اختيار جامع؛ أما القيم الافتراضية فهي جيدة.

Metaspace والخيوط

ليست الذاكرة المؤقتة منطقة الذاكرة الوحيدة:

  • -XX:MaxMetaspaceSize يضع حدًا لمساحة البيانات الوصفية للفئات؛ ومن دونه قد يؤدي تسرّب أثناء تحميل الفئات إلى استنفاد الذاكرة الأصلية.
  • -Xss يحدد حجم مكدس كل خيط؛ فاخفضه إذا كنت تشغّل عددًا كبيرًا جدًا من الخيوط، وارفعه عند استخدام الاستدعاء التكراري العميق.

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

اختبار سريع

ما الذي يتحكم فيه العلمان -Xms و-Xmx؟

مراجعة

الأعلام التي يجدر بك معرفتها:

  • -Xms / -Xmx يحددان حجم الذاكرة المؤقتة.
  • اختر جامعًا: G1 (الافتراضي)، أو ZGC (فترات توقف قصيرة)، أو Parallel (معدل إنجاز مرتفع).
  • حدّد -XX:MaxGCPauseMillis عند استخدام G1، وفعّل -Xlog:gc* للمراقبة.
  • استخدم MaxRAMPercentage في الحاويات، وHeapDumpOnOutOfMemoryError لمزيد من الأمان.
  • غيّر علمًا واحدًا في كل مرة، ثم قِس النتائج.

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

هل درس «أعلام ضبط JVM الشائعة» مجاني؟

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

ماذا ستتعلم في «أعلام ضبط JVM الشائعة»؟

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

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

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

كم من الوقت يستغرق درس «أعلام ضبط JVM الشائعة»؟

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

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

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

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

  1. تحديد الاختناقات
  2. Java Flight Recorder
  3. التحليل باستخدام JDK Mission Control
  4. أعلام ضبط JVM الشائعة
← العودة إلى Java Academy