مُحمِّل فئات جافا

يقوم مُحمِّل فئات جافا ، وهو جزء من بيئة تشغيل جافا ، بتحميل فئات جافا ديناميكيًا إلى آلة جافا الافتراضية . [ 1 ] [ 2 ] عادةً ما يتم تحميل الفئات عند الطلب فقط . تقوم الآلة الافتراضية بتحميل ملفات الفئات اللازمة لتنفيذ البرنامج فقط. [ 3 ] لا يحتاج نظام تشغيل جافا إلى معرفة الملفات وأنظمة الملفات، حيث يتم تفويض هذه المهمة إلى مُحمِّل الفئات.

مكتبة البرمجيات هي مجموعة من التعليمات البرمجية المترابطة . في لغة جافا ، تُجمّع المكتبات عادةً في ملفات JAR . يمكن أن تحتوي المكتبات على كائنات من أنواع مختلفة. أهم نوع من الكائنات الموجودة في ملف JAR هو فئة جافا . يمكن اعتبار الفئة وحدة برمجية مُسماة. مُحمِّل الفئات مسؤول عن تحديد مواقع المكتبات، وقراءة محتوياتها، وتحميل الفئات الموجودة فيها. يتم هذا التحميل عادةً "عند الطلب"، أي أنه لا يحدث إلا عند استدعاء الفئة من قِبل البرنامج. لا يمكن تحميل فئة باسم مُحدد إلا مرة واحدة بواسطة مُحمِّل فئات مُحدد.

يجب تحميل كل فئة من فئات جافا بواسطة مُحمِّل الفئات. [ 4 ] [ 5 ] علاوة على ذلك، قد تستخدم برامج جافا مكتبات خارجية (أي مكتبات كتبها وقدمها شخص آخر غير مؤلف البرنامج) أو قد تتكون، جزئيًا على الأقل، من عدد من المكتبات.

عند بدء تشغيل JVM، يتم استخدام ثلاثة محملات فئات: [ 6 ] [ 7 ] [ 3 ]

  1. مُحمِّل فئات Bootstrap
  2. مُحمِّل فئات الإضافات
  3. محمل فئات النظام

يقوم مُحمِّل فئات التمهيد بتحميل مكتبات جافا الأساسية [ fn 1 ] الموجودة في الدليل <JAVA_HOME>/jre/lib(أو <JAVA_HOME>/jmods>في جافا 9 والإصدارات الأحدث). هذا المُحمِّل، وهو جزء من آلة جافا الافتراضية الأساسية، مكتوب بلغة برمجة أصلية. لا يرتبط مُحمِّل فئات التمهيد بأي كائن. [ 3 ] على سبيل المثال، يُعيد . [ 3 ]ClassLoaderStringBuilder.class.getClassLoader()null

يقوم مُحمِّل فئة الإضافات بتحميل التعليمات البرمجية في أدلة الإضافات ( <JAVA_HOME>/jre/lib/ext، [ 6 ] أو أي دليل آخر تحدده java.ext.dirsخاصية النظام).

يقوم مُحمِّل فئة النظام بتحميل التعليمات البرمجية الموجودة في java.class.path، والتي ترتبط بمتغير CLASSPATHالبيئة .

مُحمِّلات الفئات المُعرَّفة من قِبل المستخدم

مُحمِّل فئات جافا مكتوب بلغة جافا. لذا، يُمكن إنشاء مُحمِّل فئات مُخصَّص دون الحاجة إلى فهم تفاصيل آلة جافا الافتراضية. باستثناء مُحمِّل فئات Bootstrap، لكل مُحمِّل فئات جافا مُحمِّل فئات أب. [ 8 ] يُحدَّد مُحمِّل الفئات الأب عند إنشاء مُحمِّل فئات جديد أو عند تعيينه كمُحمِّل الفئات الافتراضي لنظام الآلة الافتراضية.

وهذا يجعل ذلك ممكناً (على سبيل المثال):

مُحمّلات الفئات في جاكرتا EE

تقوم خوادم تطبيقات Jakarta EE (المعروفة سابقًا باسم Java EE وJ2EE) عادةً بتحميل الفئات من أرشيف WAR أو EAR المنشور عبر شجرة من مُحمِّلات الفئات، مما يعزل التطبيق عن التطبيقات الأخرى، ولكنه يسمح بمشاركة الفئات بين الوحدات المنشورة. تُنفَّذ ما يُسمى بـ " حاويات servlet " عادةً باستخدام مُحمِّلات فئات متعددة. [ 5 ] [ 10 ]

جحيم الجرار

يُستخدم مصطلح "جحيم ملفات JAR " لوصف جميع الطرق المختلفة التي قد تفشل بها عملية تحميل الفئات. [ 11 ] ثلاثة من هذه الطرق هي:

  • وجود نسختين مختلفتين من مكتبة واحدة مثبتتين على النظام عن طريق الخطأ. لن يعتبر النظام هذا خطأً، بل سيقوم بتحميل الفئات من إحدى المكتبتين. قد يؤدي إضافة المكتبة الجديدة إلى قائمة المكتبات المتاحة بدلاً من استبدالها إلى استمرار التطبيق في العمل كما لو كانت المكتبة القديمة قيد الاستخدام، وهو أمر وارد.
  • تتطلب مكتبات أو تطبيقات متعددة إصدارات مختلفة من المكتبة foo . إذا كانت إصدارات المكتبة foo تستخدم نفس أسماء الفئات، فلا توجد طريقة لتحميل هذه الإصدارات باستخدام نفس مُحمِّل الفئات .
  • تنشأ أكثر مشاكل "جحيم ملفات JAR" تعقيدًا في الظروف التي تستغل التعقيد الكامل لنظام تحميل الفئات. لا يُشترط في برنامج جافا استخدام مُحمِّل فئات "مسطح" واحد فقط، بل قد يتألف من عدة مُحمِّلات فئات متداخلة ومتعاونة (ربما كثيرة جدًا). ​​قد تتفاعل الفئات التي يتم تحميلها بواسطة مُحمِّلات فئات مختلفة بطرق معقدة لا يفهمها المطور تمامًا، مما يؤدي إلى أخطاء أو عيوب يصعب تحليلها وتفسيرها وحلها. [ 12 ]

حدد تحالف OSGi (بدءًا من JSR 8 في عام 1998) إطار عمل معياري يهدف إلى حل مشكلة تعارض ملفات JAR في الأجهزة الافتراضية الحالية والمستقبلية في أنظمة ME وSE وEE، وهو إطار عمل مُعتمد على نطاق واسع. باستخدام البيانات الوصفية في بيان JAR ، يتم ربط ملفات JAR (المسماة بالحزم) على أساس كل حزمة على حدة. يمكن للحزم تصدير الحزم واستيرادها والحفاظ على خصوصيتها، مما يوفر البنية الأساسية للمعيارية وإدارة التبعيات المُدارة بالإصدارات.

قدمت Java 9 نظام وحدات منصة Java في عام 2017. يحدد هذا النظام تنسيق توزيع لمجموعات من أكواد Java والموارد المرتبطة بها. كما يحدد مستودعًا لتخزين هذه المجموعات، أو الوحدات ، ويوضح كيفية اكتشافها وتحميلها والتحقق من سلامتها. يتضمن النظام ميزات مثل مساحات الأسماء بهدف معالجة بعض أوجه القصور في تنسيق JAR الحالي . يتبع نظام وحدات منصة Java فلسفة مختلفة عن بنية OSGi التي تهدف إلى توفير نمطية لبيئة تشغيل Java بطريقة متوافقة مع الإصدارات السابقة، باستخدام آلية تحميل الفئات الافتراضية التي توفرها JRE. مع ذلك، ولأن نظام وحدات منصة Java لا يوفر إمكانية التحكم في تعايش المكتبات ذات الإصدارات المختلفة، فإنه لا يعالج مشكلة "جحيم JAR" بشكل كامل. [ 13 ]

انظر أيضاً

الحواشي

  1. يتم تخزين هذه المكتبات في ملفات Jar تسمى rt.jar و core.jar و server.jar وما إلى ذلك.

مراجع

  1. ماكمانيس، تشاك (1 أكتوبر 1996). "أساسيات مُحمِّلات فئات جافا" . جافا وورلد . تم الاسترجاع في 13 يوليو 2020 .
  2. بلوم، جيمس د. (24-11-2013). "JVM Internals" . جيمس د. بلوم . تم الاسترجاع في 20-11-2025 .
  3. 1 2 3 4 هورستمان 2022 ، §10.1.1 عملية تحميل الفئات.
  4. هورستمان 2022 ، §8.2.5 كتابة رموز البايت إلى الذاكرة.
  5. 1 2 كريستوداس، بينيلداس (26 يناير 2005). "آليات تحميل فئات جافا الداخلية" . onjava.com . مؤرشف من الأصل بتاريخ 10 مايو 2018.
  6. 1 2 "فهم تحميل فئات الامتداد" . دروس جافا. docs.oracle.com . تم الاطلاع عليه بتاريخ 13 يوليو 2020 .
  7. سوسنوسكي، دينيس (29 أبريل 2003). "الفئات وتحميل الفئات" . IBM DeveloperWorks . تم الاسترجاع في 26 يناير 2008 .
  8. هورستمان 2022 ، 10.1.2 التسلسل الهرمي لمحمل الفئة.
  9. روبتسوف، فلاديمير (9 مايو 2003). "فك تشفير بايت كود جافا" . جافا وورلد . تم الاسترجاع في 13 يوليو 2020 .
  10. دي بوير، تيم؛ كاراسيوك، غاري (21 أغسطس 2002). "تبسيط تحميل فئات J2EE" . IBM DeveloperWorks . تم الاسترجاع في 26 يناير 2008 .
  11. "مستودع - حاضنة أباتشي" . مؤرشف من الأصل بتاريخ 2013-06-01.
  12. "تصنيف مشاكل مُحمِّل الفئات مع تسجيل Jakarta Commons" .
  13. بارتليت، نيل؛ هاكبارث، كاي (22-09-2016). "جافا 9، أو إس جي آي ومستقبل النمطية (الجزء 1)" . إنفو كيو.