【Pengantar Kelas Loader】
ClassLoader digunakan untuk memuat file kelas ke mesin virtual JVM. Ada tiga jenis loader di JVM, bootstrap class loader, Extension Class Loader dan Application Class Loader. Selain itu, Anda juga dapat mewarisi kelas java.lang.classloader untuk membuat loader khusus.
【Tipe Loader Kelas】
1. Bootstrap: Ini bukan kelas Java. Ini ditulis dalam C ++, tertanam dalam kernel JVM, dan digunakan untuk memanggil eksekusi kode asli menggunakan JNI (JavanativeInterface). Loader kelas boot bertanggung jawab untuk memuat pustaka kelas Java Core, seperti file RT.jar di bawah java_home/jre/lib. File jar ini berisi beberapa kelas umum seperti:
java.lang.system java.util.hashmap
2. ExtClassLoader: Diwarisi dari kelas java.lang.classloader, digunakan untuk memuat file jar di bawah jalur ekstensi, jalur ekstensi adalah java_home/jre/lib/ext
3. Aplikasi Kelas Loader (AppClassLoader): Warisan dari kelas Java.lang.classloader, digunakan untuk memuat kelas di bawah ClassPath. tertawa terbahak -bahak
【Mekanisme Delegasi Loader Kelas】
1. Ketika aplikasi perlu memuat kelas, file bytecode dari kelas yang diperlukan akan dimuat di bawah jalur yang sesuai dalam urutan bootstrap, extclassloader, dan appclassloader.
2. Kami dapat mengkompilasi kelas khusus menjadi file kelas dan mengetiknya ke dalam paket JAR, dan menempatkannya di jalur Java_Home/JRE/LIB/EXT. Ketika class loader dimuat, itu akan dimuat dari java_home/jre/lib/ext path menggunakan loader extclassloader, dan tidak akan dimuat di bawah classpath menggunakan loader appclassloader.
3. Setelah menggunakan class loader dalam urutan bootstrap, extclassloader, appclassloader, dan gagal memuat kelas, kelas tidak akan ditemukan: java.lang.classnotfoundException
【Demo Aplikasi】
1.BootStrap: Ditulis dalam C ++, tertanam dalam kernel JVM, bukan kelas Java
Classloader loader = system.class.getClassLoader (); System.out.println (loader); //batal
2. AppClassLoader: Gunakan loader appClassLoader untuk memuat kelas di bawah ClassPath
Classloader loader = classloaderTest.class.getClassLoader (); System.out.println (loader.getClass (). GetName ()); //sun.misc.launcher$AppclassLoader
3.ExtClassLoader: Digunakan untuk memuat kelas Java di bawah Java_Home/JRE/LIB/EXT PATH. Setelah ditemukan, itu tidak akan dimuat di classpath.
Tulis kelas Hello khusus, ketik ke dalam paket jar dan ekspor ke 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.launcher$extClassLoader
============================================
Loader kelas adalah topik yang relatif kompleks, hanya untuk pengantar!
Meringkaskan
Di atas adalah semua konten artikel ini tentang analisis dasar loader kelas JVM, dan saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!