0Pricing
Java Academy · Ders

ClassLoader Hiyerarşisi ve Özel Yükleyiciler

Önyükleme, platform ve uygulama sınıf yükleyicilerini anlayın ve özel bir ClassLoader yazın.

ClassLoader Hiyerarşisi ve Özel Yükleyiciler, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.

ClassLoader Hiyerarşisi

JVM, ClassLoader hiyerarşisi kullanır. Her yükleyicinin bir üst öğesi vardır; bir sınıfı kendisi yüklemeden önce yükleme işini üst öğesine devreder (önce üst öğe yetkilendirme modeli).

Önyükleme ClassLoader'ı

Önyükleme ClassLoader'ı temel JDK sınıflarını (java.lang.*, java.util.*) yükler. Yerel kodla uygulanır ve Java türünde bir üst öğesi yoktur; getParent() değeri null döndürür.

ClassLoader cl = String.class.getClassLoader();
System.out.println(cl); // null (bootstrap ClassLoader)

Platform ClassLoader'ı (Java 9 ve Sonrası)

Platform ClassLoader'ı (önceden Uzantı ClassLoader'ı), önyükleme kümesinde bulunmayan JDK modüllerini (java.sql, java.xml vb.) yükler. Üst öğesi önyükleme yükleyicisidir.

ClassLoader platform = ClassLoader.getPlatformClassLoader();
System.out.println(platform.getClass().getName());
// jdk.internal.loader.ClassLoaders$PlatformClassLoader

Uygulama (Sistem) ClassLoader'ı

Uygulama ClassLoader'ı, uygulama sınıflarını sınıf yolundan (-cp / CLASSPATH) yükler. Üst öğesi Platform ClassLoader'dır. Kullanıcı kodu için varsayılan yükleyicidir.

ClassLoader app = ClassLoader.getSystemClassLoader();
System.out.println(app.getClass().getName());
// jdk.internal.loader.ClassLoaders$AppClassLoader

Önce Üst Öğeye Yetkilendirme

com.example.MyService yüklenirken AppClassLoader önce üst öğesine (Platform) sorar; Platform da Önyükleme'ye sorar. Yalnızca üst öğelerin hiçbiri yükleyemezse alt öğe kendisi yüklemeyi dener.

Sınıf Kimliği ve ClassLoader'lar

Aynı ada sahip olup farklı ClassLoaders tarafından yüklenen iki sınıf, farklı türler kabul edilir. Bunlar arasında tür dönüştürme yapmak ClassCastException fırlatır; bu durum eklenti sistemlerinde ve OSGi'de önemlidir.

// Loaded by two different loaders → different Class objects
Class<?> c1 = loader1.loadClass("com.example.Plugin");
Class<?> c2 = loader2.loadClass("com.example.Plugin");
System.out.println(c1 == c2); // false!

Özel ClassLoader Yazma

ClassLoader sınıfını genişletin ve findClass(String name) yöntemini geçersiz kılın. Bayt kodunu özel bir kaynaktan (şifrelenmiş JAR, ağ, veritabanı) okuyun ve defineClass çağrısını yapın.

public class EncryptedClassLoader extends ClassLoader {
    public EncryptedClassLoader(ClassLoader parent) { super(parent); }
    @Override
    protected Class<?> findClass(String name) throws ClassNotFoundException {
        byte[] bytes = decrypt(readBytecodeFromVault(name));
        return defineClass(name, bytes, 0, bytes.length);
    }
}

URL ClassLoader: JAR'lardan Yükleme

URLClassLoader, sınıfları bir URL listesinden (dosya yolları veya HTTP URL'leri) yükler. Çalışma zamanında JAR ekleyen eklenti sistemleri için kullanışlıdır.

URL[] urls = { new File("plugins/my-plugin.jar").toURI().toURL() };
try (URLClassLoader loader = new URLClassLoader(urls, getClass().getClassLoader())) {
    Class<?> cls = loader.loadClass("com.example.PluginImpl");
    Plugin plugin = (Plugin) cls.getDeclaredConstructor().newInstance();
    plugin.start();
}

ClassLoader'ları Kapatma

İşiniz bittiğinde URLClassLoader'ı her zaman kapatın; aksi takdirde JAR'ları açık tutar. Kapatmak, JAR'ların silinmesine veya güncellenmesine olanak tanır. Kaynaklarla dene-yaklaşımını kullanın.

Önce Alt Öğeye Yetkilendirme (Yalıtılmış Yükleme)

Bazı kapsayıcılar (Tomcat, Spring Boot fat JAR) hiyerarşiyi tersine çevirir: alt yükleyici önce dener, yalnızca bulamazsa üst öğeye başvurur. Bu, web uygulamaları arasındaki kitaplık sürümlerini birbirinden yalıtır.

ClassLoader Sızıntıları

Bir sınıf yükleyicisi, yalnızca onun tarafından yüklenen hiçbir sınıfa erişilemiyorsa çöp toplanır. Yüklenen bir sınıftan gelen nesneleri tutan statik alanlar yükleyiciyi canlı tutar; bu, yeniden dağıtım senaryolarında yaygın bir sızıntıdır.

Kısa Kontrol

Bir ClassLoader, bir sınıfı kendisi yüklemeyi denemeden önce ne yapar?

Özet

Üç düzeyli hiyerarşi: Önyükleme → Platform → Uygulama. Önce üst öğeye yetkilendirme, sınıf çoğaltılmasını önler. Özel yükleyiciler findClass yöntemini geçersiz kılar. Eklenti sistemleri için URLClassLoader kullanın. Sızıntıları önlemek için yükleyicileri kapatın.

Sıkça Sorulan Sorular

“ClassLoader Hiyerarşisi ve Özel Yükleyiciler” dersi ücretsiz mi?

Evet — “ClassLoader Hiyerarşisi ve Özel Yükleyiciler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.

“ClassLoader Hiyerarşisi ve Özel Yükleyiciler” dersinde ne öğreneceğim?

Önyükleme, platform ve uygulama sınıf yükleyicilerini anlayın ve özel bir ClassLoader yazın. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Java Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“ClassLoader Hiyerarşisi ve Özel Yükleyiciler” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Sınıf Yükleme Aşamaları: Yükleme, Bağlama, Başlatma
  2. ClassLoader Hiyerarşisi ve Özel Yükleyiciler
  3. javap ile Bayt Kodunu İnceleme
  4. JIT Derlemesi ve Katmanlı Derleme
← Java Academy Sayfasına Dön