Sobes.tech
Middle

Java'da ClassLoader nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Java'da ClassLoader, JVM'nin (Java Sanal Makinesi) sınıfları yüklemekle sorumlu bileşenidir.

Ana işlevler:

  • Yükleme: Farklı kaynaklardan (.class bayt kodu dosyaları) sınıfları bulur ve yükler (dosya sistemi, ağ, JAR arşivleri).
  • Bağlama (Linking):
    • Doğrulama: Bayt kodunun doğruluğunu ve güvenlik standartlarına uygunluğunu kontrol eder.
    • Hazırlık: Statik değişkenler için bellek ayırır ve varsayılan değerlerle başlatır.
    • Çözümleme (isteğe bağlı): Sembolik referansları (başka sınıflar veya metodlara referanslar gibi) doğrudan bellek referanslarına dönüştürür.
  • İlk Yükleme: Sınıfın statik başlatıcı bloklarını çalıştırır ve statik alanlara başlangıç değerleri atar.

Hiyerarşi:

ClassLoader'lar bir hiyerarşi oluşturur. Bir ClassLoader sınıfı yüklemek istediğinde, önce isteği ebeveyn ClassLoader'ına devreder. Eğer ebeveyn ClassLoader sınıfı bulamaz veya yükleyemezse, mevcut ClassLoader kendisi denemeye çalışır.

Temel gömülü ClassLoader'lar:

  • Bootstrap ClassLoader: JVM'nin yerel bir parçasıdır, temel JDK sınıflarını yükler (örneğin, java.lang.Object).
  • Extension ClassLoader (modern JVM sürümleri bunu System ClassLoader ile birleştirebilir): ext dizininden sınıfları yükler.
  • System ClassLoader: Uygulamanın classpath'inden sınıfları yükler.

Kullanım örneği:

// Mevcut sınıfın ClassLoader'ını alma
ClassLoader classLoader = MyClass.class.getClassLoader();

try {
    // Tam adıyla sınıf yükleme
    Class<?> loadedClass = classLoader.loadClass("com.example.AnotherClass");
    System.out.println("Yüklenen sınıf: " + loadedClass.getName());
} catch (ClassNotFoundException e) {
    System.err.println("Sınıf bulunamadı: " + e.getMessage());
}

Avantajlar:

  • Dinamik yükleme: Sınıfları ihtiyaç duyulduğunda yüklemeye izin verir, bu da kaynak tasarrufu sağlar.
  • Modülerlik: Uygulamanın farklı bölümleri farklı ClassLoader'lar kullanabilir, bu da kodun izolasyonuna yardımcı olur.
  • Güvenlik: Bayt kodunun doğrulanması temel güvenlik sağlar.
  • Sıcak sınıf değiştirme (HotSwapping): Bazı ortamlarda, ClassLoader'lar yüklenen sınıfları JVM yeniden başlatmadan değiştirmeye izin verir.