Middle
Java-da ClassLoader nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Java-da ClassLoader, JVM-nin (Java Virtual Machine) sinfləri yükləməkdən məsul olan komponentidir.
Əsas funksiyalar:
- Yükləmə: Fərqli mənbələrdən (
.classbayt kod faylları) sinfləri tapır və yükləyir (fayl sistemi, şəbəkə, JAR arxivləri). - Bağlama (Linking):
- Yoxlama: Bayt kodunun düzgünlüyünü və təhlükəsizlik standartlarına uyğunluğunu yoxlayır.
- Hazırlıq: Statik dəyişənlər üçün yaddaş ayırır və onların standart dəyərlərini ilkinləşdirir.
- Həll (istəyə bağlı): Sembolik istinadları (məsələn, digər sinflərə və ya metodlara istinadlar) birbaşa yaddaş istinadlarına dəyişir.
- İlkinləşdirmə: Sinifin statik başlanğıc bloklarını icra edir və statik sahələrə ilkin dəyərlər verir.
Hierarxiya:
ClassLoader-lər hierarxiya təşkil edir. Bir ClassLoader sinfi yükləmək üçün, əvvəlcə onun valideyn ClassLoader-ına müraciət edir. Əgər valideyn sinfi tapmazsa və ya yükləyə bilməzsə, cari ClassLoader öz-özünə cəhd edir.
Əsas inteqrasiya olunmuş ClassLoader-lər:
- Bootstrap ClassLoader: JVM-nin yerli hissəsidir, əsas JDK sinflərini yükləyir (məsələn,
java.lang.Object). - Extension ClassLoader (modern JVM versiyalarında onu System ClassLoader ilə birləşdirə bilərlər):
extqovluğundan sinfləri yükləyir. - System ClassLoader: tətbiqin classpath-dən sinfləri yükləyir.
İstifadə nümunəsi:
// Mövcud sinfin ClassLoader-ını əldə et
ClassLoader classLoader = MyClass.class.getClassLoader();
try {
// Tam adı ilə sinfi yüklə
Class<?> loadedClass = classLoader.loadClass("com.example.AnotherClass");
System.out.println("Yüklənmiş sinif: " + loadedClass.getName());
} catch (ClassNotFoundException e) {
System.err.println("Sinif tapılmadı: " + e.getMessage());
}
Üstünlüklər:
- Dinamik yükləmə: Sinfləri tələb olunduqda yükləməyə imkan verir, bu da resurslardan qənaət edir.
- Modulluq: Tətbiqin müxtəlif hissələri müxtəlif ClassLoader-lərdən istifadə edə bilər, bu da kodun izolyasiyasına kömək edir.
- Təhlükəsizlik: Bayt kodunun yoxlanması əsas təhlükəsizliyi təmin edir.
- HotSwapping: Bəzi mühitlərdə ClassLoader-lər yüklənmiş sinfləri JVM-i yenidən başlatmadan dəyişdirməyə imkan verir.