محمل الكلاسات في جافا Class Loader

في البداية, سبق و شرحنا طريقة عمل الكود الذي نكتبه بلغة جافا بشكل عام في دورة جافا و قلنا أنه كالتالي.

إذاً عندما تقوم بكتابة ملفات java يتم ترجمتها لترميز ثماني (byte-code) بواسطة المترجم (Compiler) فتصبح بصيغة class بطريقة معينة بحيث تستطيع فيها آلة جافا الإفتراضية JVM قراءة الكلاس و إستخدامه لاحقاً.

سنتحدث في هذا المقال عن طريقة تحميل الكلاسات بدقة أكثر في آلة جافا الإفتراضية.

 

طلب تحميل كلاس في جافا

يتم طلب تحميل كلاس معين عند أول إستخدام للكلاس من الكود, و يكون أول إستخدام للكلاس عن طريق إستخدام أي شيء ثابت (static) في الكلاس و يشمل ذلك الكونستركتور (constructor), و السبب الذي يعود وراء عدم تحميل آلة جافا الإفتراضية لجميع الكلاسات عند تشغيل البرنامج هو أن عملية تحميل الكلاس قد تتطلب تنزيل بيانات من الإنترنت و غيرها من العمليات التي تستغرق وقت و تسبب بطئ و قد لا يتم إستخدام الكلاس أصلاً.

يمكن طلب تحميل الكلاس يدوياً بإستخدام الدالة ()loadClass.

 

تحميل الكلاس في جافا

عندما تتلقى آلة جافا الافتراضية طلب تحميل كلاس معين تستخدم نظام محملي الكلاسات (Class loaders), و يتكون هذا النظام من ثلاثة محملين مترابطين مع بعضهم و وظيفتهم هي العثور على بيانات الكلاس byte-code من خلال البحث عنه بإستخدام إسمه الكامل متضمناً أسماء الحزم الواقع فيها (مثلاً java.lang.String) و تحويلها للكائن java.lang.Classو هم كالتالي:

  • محمل الكلاسات التمهيدي (BootStrap ClassLoader):
  • يقوم محمل الكلاسات التمهيدي بتحميل الكلاسات الأساسية في لغة جافا و المتواجدة في المسار jre/lib, و هو مكتوب بالـ Native code و مضمن داخل آلة جافا الافتراضية.
  • محمل الكلاسات الملحق (Extension ClassLoader):
  • هو إبن للمحمل التمهيدي و مهمته هي تحميل كلاسات ملحقات آلة جافا الافتراضية و الموجودة في المسار jre/lib/ext.
  • محمل كلاسات التطبيق (Application ClassLoader):
  • هو إبن للمحمل الملحق و مهمته هي تحميل الكلاسات الموجودة في مسار الكلاسات classpath, و هو الذي يقوم بتحميل الكلاسات التي نكتبها في برامجنا.

طريقة تحميل الكلاس من أول محمل للكلاسات كالتالي:

  1. يتم معرفة إن كان الكلاس قد تم تحميله مسبقاً أم لا.
  2. إن لم يتم تحميله يقوم محمل الكلاسات بطلب تحميل الكلاس من محمل الكلاسات الأب.
  3. إذا فشل الأب يحاول الإبن تحميل الكلاس.

(المصدر GeeksForGeeks.org , تحت رخصة CC BY-SA 4.0)


ربط الكلاس في لغة جافا Linking

تتألف عملية ربط الكلاس بآلة جافا الإفتراضية ليتم تنفيذه من ثلاثة خطوات:

  1. التحقق من أن الترميز الثماني (bytecode) منطقي و مفهوم لآلة جافا الإفتراضية.
  2. تجهيز الكلاس من خلال حجز مساحة للمتغيرات الثابتة في الذاكرة و إعطاء القيم الإفتراضية لها.
  3. تحميل الكلاسات التي يشير إليها الكلاس المحمل, وهذه العملية لا تحدث دائماً.

(المصدر javatutorial.net, تحت رخصة CC BY-NC-SA 4.0)


التهيئة في لغة جافا Initialization

في هذه المرحلة تقوم آلة جافا الإفتراضية بتنفيذ جميع العمليات الثابتة مثل تعيين قيم المتغيرات الثابتة (static variables) و تنفيذ البلوكات الثابتة (static blocks).

class Example {

    //in the preparing phase x will contain the value 0
    //after the initializing phase x will contain the value 20 
    private int x = 20;

    static {
        System.out.println("this is a static block and will be executed in the initializing phase");
    }

}


بعد كل هذه العمليات يصبح الكلاس جاهزاً للإستخدام و يمكن إنشاء كائنات منه.


يتضمن: Java , Programming

آخر تحديث: 20-12-2021

الكاتب

رامي عبدالله

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

تعليقات

لا يوجد أي تعليق بعد

أضف تعليق

يجب تسجيل الدخول حتى تتمكن من إضافة تعليق أو رد.

تقييم المقال

لم تقم بتقييم المقال بعد!

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة