Czym jest ładowacz klas Java? (Wyjaśnienie z 2026 roku)

Wczytywacz klas Java znajduje pliki klas i ładuje je do JVM w czasie działania. Oto co robi, jak działa hierarchia wczytywaczy i dlaczego mody na nim polegają.

Conceptsby trqUpdated June 4, 2026
Key takeaways
  • Ładowacz klas znajduje plik klasy i ładuje go do JVM, aby program mógł go użyć.
  • Klasy są ładowane przy pierwszym użyciu, a nie podczas uruchamiania, a ładowacz lokalizuje bajtkod każdego razu.
  • Wbudowane ładowacze tworzą łańcuch nadrzędny (bootstrap, platforma, aplikacja), który deleguje w górę.
  • Dzięki niestandardowym ładowaczom mody Minecraft mogą poprawiać klasy gry podczas ich ładowania.

Ładowacz klas to część środowiska uruchomieniowego Java, która znajduje plik klasy i ładuje go do JVM, aby program mógł go użyć. Klasy nie są ładowane wszystkie na początku. JVM ładuje każdą z nich po raz pierwszy, gdy jest potrzebna, a ładowacz klas znajduje kod bajtowy, odczytuje go i przekazuje do JVM. Edycja Java Minecraft działa w oparciu o ten sam mechanizm.

Gdzie pasuje Opal

Opal to mod dla Fabric, a Fabric ładuje grę za pomocą własnego ładowacza klas, dzięki czemu mody mogą modyfikować klasy podczas ich ładowania. Przewodnik instalacji przeprowadza Cię przez proces instalacji.

Jak naprawdę działa ładowacz klas

Ładowacz klas przekształca nazwę klasy w używaną klasę w działającym JVM. Żądasz typu, ładowacz lokalizuje pasujące bajty .class, a JVM definiuje ten typ w pamięci.

Praca odbywa się w trzech krokach. Ładowacz znajduje bajtkod dla klasy o określonej nazwie. JVM weryfikuje i łączy go. Następnie klasa jest gotowa do użycia. Dlatego program Java może pobierać kod, o którym nie wspomniano podczas kompilacji: wystarczy nazwa, aby ładowacz mógł go znaleźć.

Hierarchia ładowaczy

Ładowacze klas są ułożone w hierarchię nadrzędną, a większość z nich najpierw pyta swojego nadrzędnego. Standardowa aplikacja ma trzy wbudowane ładowacze ułożone jeden na drugim.

ŁadowaczŁaduje
BootstrapRdzenne klasy środowiska uruchomieniowego Java
PlatformStandardowe moduły biblioteczne spoza rdzenia
AplikacjaWłasne klasy Twojego programu z classpath

Gdy ładowacz aplikacji jest proszony o klasę, zazwyczaj najpierw deleguje zapytanie w górę. Nadrzędny ma szansę ją załadować, a dziecko próbuje tylko wtedy, gdy żaden nadrzędny nie może tego zrobić. Nazywa się to modelem delegacji i zapewnia spójność rdzennych typów w całym programie.

Tożsamość klasy i niestandardowe ładowacze

Klasa jest identyfikowana zarówno po nazwie, jak i loaderze, który ją zdefiniował. Dwa loadery mogą ładować klasy o tej samej nazwie, a JVM traktuje je jako dwa różne typy. Brzmi to jak drobiazg, ale to właśnie jest powód, dla którego loadery klas są tak potężne.

Programy mogą definiować własne loadery. Niestandardowy loader może odczytywać bytecode z dowolnego miejsca: z pliku jar, sieci, wygenerowanej tablicy bajtów, a nawet bytecode, który został przekształcony w trakcie ładowania. Dzięki temu działają systemy wtyczek, serwery aplikacji i frameworki modyfikacji, które ładują kod, o którym program hosta nie wiedział w czasie kompilacji.

Dlaczego to ma znaczenie dla modyfikacji Minecraft

Modifikacje istnieją dzięki niestandardowemu ładowaniu klas. Loader modów dla Minecrafta uruchamia grę za pomocą własnego loadera, aby móc przeglądać i modyfikować klasy gry w trakcie ładowania. To punkt zaczepienia, w którym odbywa się łatanie bytecode.

Kiedy loader znajduje się pomiędzy dyskiem a JVM, może przekształcić klasę tuż przed tym, jak JVM ją zdefiniuje. Mod może przepisać metodę gry, wstrzyknąć nowe zachowanie lub dodać pola, wszystko to bez zmodyfikowanej kopii gry na dysku. Klasa, którą ostatecznie uruchamia JVM, to ta poprawiona. Aby dowiedzieć się, jak to wpisuje się w szerszy obraz, zobacz Co to jest loader modów Minecraft?.

FAQ