Sobes.tech
Middle

Čo je to ClassLoader v Jave?

sobes.tech AI

Odpoveď od AI

ClassLoader v Jave je komponent JRE, ktorý je zodpovedný za načítanie tried do virtuálnej Java (JVM).

Hlavné funkcie:

  • Načítanie: Nájde a načíta bytecode .class súborov z rôznych zdrojov (súborový systém, sieť, JAR archívy).
  • Prepojenie (Linking):
    • Verifikácia: Skontroluje správnosť bytecode a súlad so bezpečnostnými štandardmi.
    • Príprava: Vyhradí pamäť pre statické premenné a inicializuje ich predvolenými hodnotami.
    • Resolúcia (nepovinné): Nahradí symbolické odkazy (napríklad odkazy na iné triedy alebo metódy) priamymi odkazmi v pamäti.
  • Inicializácia: Vykoná statické bloky inicializácie triedy a priradí počiatočné hodnoty statickým poliam.

Hierarchia:

ClassLoadery tvoria hierarchiu. Keď je potrebné načítať triedu, ClassLoader najskôr deleguje požiadavku svojmu rodičovskému ClassLoaderu. Ak rodičovský ClassLoader nemôže nájsť alebo načítať triedu, pokúsi sa to urobiť aktuálny ClassLoader.

Hlavné vstavané ClassLoadery:

  • Bootstrap ClassLoader: Časť nativnej JVM, načítava základné triedy JDK (napríklad java.lang.Object).
  • Extension ClassLoader (moderné verzie JVM môžu spojiť s System ClassLoader): Načítava triedy z adresára ext JRE.
  • System ClassLoader: Načítava triedy z classpath aplikácie.

Príklad použitia:

// Získanie ClassLoadera aktuálnej triedy
ClassLoader classLoader = MyClass.class.getClassLoader();

try {
    // Načítanie triedy podľa jej úplného mena
    Class<?> loadedClass = classLoader.loadClass("com.example.AnotherClass");
    System.out.println("Trieda načítaná: " + loadedClass.getName());
} catch (ClassNotFoundException e) {
    System.err.println("Trieda nenájdená: " + e.getMessage());
}

Výhody:

  • Dynamické načítanie: Umožňuje načítať triedy na požiadanie, čo šetrí zdroje.
  • Modularita: Rôzne časti aplikácie môžu používať rôzne ClassLoadery, čo pomáha izolovať kód.
  • Bezpečnosť: Proces verifikácie bytecode zabezpečuje základnú bezpečnosť.
  • Horká výmena tried (HotSwapping): V niektorých prostrediach ClassLoadery umožňujú meniť načítané triedy bez reštartu JVM.