【مقدمة إلى تحميل الفئة】
يتم استخدام جهاز تحميل ClassLoader لتحميل ملفات الفئة في جهاز Virtual JVM. هناك ثلاثة أنواع من اللوادر في JVM و Bootstrap Class Loader و Loader فئة الامتداد وحمل فئة التطبيق. بالإضافة إلى ذلك ، يمكنك أيضًا أن ترث فئة java.lang.classloader لإنشاء محمل مخصص.
【نوع تحميل الفئة】
1. bootstrap: إنه ليس فئة Java. يتم كتابته في C ++ ، مضمن في kernel JVM ، ويستخدم لاتصال تنفيذ الكود الأصلي باستخدام JNI (JavanativeInterface). يعد Loader فئة التمهيد مسؤولاً عن تحميل مكتبة فئة Java الأساسية ، مثل ملف RT.JAR ضمن Java_Home/JRE/LIB. يحتوي ملف الجرة هذا على بعض الفئات الشائعة مثل:
java.lang.system java.util.hashmap
2.
3. تحميل فئة التطبيق (AppClassloader): يرث من فئة java.lang.classloader ، المستخدمة لتحميل الفئة أدناه classpath. يضحك بصوت عال
【آلية التفويض من اللودر الطبقي】
1. عندما يحتاج التطبيق إلى تحميل فئة ، سيتم تحميل ملف Bytecode للفئة المطلوبة تحت المسار المقابل بترتيب bootstrap و extclassloader و appclassloader.
2. يمكننا تجميع الفئة المخصصة في ملف فئة واكتبه في حزمة جرة ، ووضعها في مسار Java_Home/JRE/LIB/EXT. عندما يتم تحميل محمل الفئة ، سيتم تحميله من مسار Java_home/JRE/LIB/EXT باستخدام محمل Loader ExtClassloader ، ولن يتم تحميله تحت ClassPath باستخدام محمل AppClassLoader.
3. بعد استخدام محمل الفئة بترتيب bootstrap و extclassloader و appclassloader ، والفشل في تحميل الفصل ، لن يتم العثور على الفئة: java.lang.classnotfoundexception
【العرض التجريبي】
1.Bootstrap: مكتوب في C ++ ، مضمن في kernel JVM ، وليس فئة Java
classloader loader = system.class.getClassLoader () ؛ system.out.println (loader) ؛ //باطل
2. appclassloader: استخدم محمل appclassloader لتحميل الفئة أدناه classpath
classloader loader = classLoaderTest.class.getClassLoader () ؛ System.out.println (loader.getClass (). getName ()) ؛ //sun.misc.launcheruteRutyAppClassLoader
3.ExtClassloader: يستخدم لتحميل فئة Java تحت مسار Java_home/JRE/LIB/EXT. بمجرد العثور عليه ، لن يتم تحميله في classpath.
اكتب فئة Hello مخصصة ، اكتبها في حزمة جرة وقم بتصديرها إلى C: /programfiles/java/jdk1.7.0/jre/lib/ext/excelsoft.jar path.
classloader loader = hello.class.getClassLoader () ؛ System.out.println (loader.getClass (). getName ()) ؛ //sun.misc.launcherredExtClasslassloader
==========================================
اللوادر الفئة هي موضوع معقد نسبيا ، فقط للمقدمة!
لخص
ما سبق هو كل محتوى هذه المقالة حول التحليل الأساسي لـ JVM Class Loader ، وآمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!