Sobes.tech
Middle

Šta je ClassLoader u Javi?

sobes.tech АИ

Одговор од АИ

ClassLoader u Javi je komponenta JVM-a odgovorna za učitavanje klasa u Java Virtual Machine (JVM).

Glavne funkcije:

  • Učitavanje: Pronalazi i učitava .class fajlove sa bajtkodovima iz različitih izvora (sistem fajlova, mreža, JAR arhive).
  • Linkovanje:
    • Verifikacija: Proverava ispravnost bajtkoda i usklađenost sa sigurnosnim standardima.
    • Priprema: Dodeljuje memoriju za statičke promenljive i inicijalizuje ih podrazumevanim vrednostima.
    • Rešavanje (opciono): Zamenjuje simboličke reference (npr. na druge klase ili metode) direktnim referencama u memoriji.
  • Inicijalizacija: Izvršava statičke blokove inicijalizacije klase i dodeljuje početne vrednosti statičkim poljima.

Hijerarhija:

ClassLoader-i formiraju hijerarhiju. Kada ClassLoader treba da učita klasu, prvo delegira zahtev svom roditeljskom ClassLoader-u. Ako roditelj ne može da pronađe ili učita klasu, trenutni ClassLoader pokušava sam.

Glavni ugrađeni ClassLoader-i:

  • Bootstrap ClassLoader: Deo nativne JVM, učitava osnovne klase JDK (npr. java.lang.Object).
  • Extension ClassLoader (savremene verzije JVM-a mogu da ga spoje sa System ClassLoader-om): Učitava klase iz ext direktorijuma JRE.
  • System ClassLoader: Učitava klase iz classpath-a aplikacije.

Primer upotrebe:

// Dobijanje ClassLoader-a trenutne klase
ClassLoader classLoader = MyClass.class.getClassLoader();

try {
    // Učitavanje klase po njenom punom imenu
    Class<?> loadedClass = classLoader.loadClass("com.example.AnotherClass");
    System.out.println("Učitana klasa: " + loadedClass.getName());
} catch (ClassNotFoundException e) {
    System.err.println("Klasa nije pronađena: " + e.getMessage());
}

Prednosti:

  • Dinamičko učitavanje: Omogućava učitavanje klasa na zahtev, što štedi resurse.
  • Modularnost: Različiti delovi aplikacije mogu koristiti različite ClassLoader-e, što pomaže u izolaciji koda.
  • Bezbednost: Proces verifikacije bajtkoda obezbeđuje osnovnu sigurnost.
  • HotSwapping klasa: U nekim okruženjima, ClassLoader-i omogućavaju zamenu učitanih klasa bez restartovanja JVM-a.