Learn · concepts
Czym jest JVM? Wyjaśnienie Java Virtual Machine
JVM uruchamia bytecode Java na każdym systemie operacyjnym. Dzięki temu Minecraft Java Edition i każdy mod Fabric działają identycznie na Windows, macOS i Linuxie.
Co to jest JVM?
JVM, czyli Java Virtual Machine, to program, który uruchamia kod Java. Piszesz w Javie, kompilator zamienia go w bytecode, a JVM uruchamia ten bytecode na dowolnym systemie operacyjnym. Dlatego Minecraft Java Edition i mody do niego działają identycznie na Windows, macOS i Linux bez potrzeby rekompilacji. JVM to warstwa abstrakcji, która sprawia, że hasło „napisz raz, uruchom gdziekolwiek” staje się rzeczywistością, a nie tylko sloganem marketingowym.
Co właściwie robi JVM
JVM wykonuje bytecode, a nie kod źródłowy. Kompilując program Java, nie otrzymujesz wykonywalnego pliku dla systemu Windows lub macOS. Otrzymujesz pliki klas pełne bytecode, czyli zwartego zestawu instrukcji, które JVM rozumie. JVM odczytuje te instrukcje i wykonuje je na Twoim komputerze.
Właśnie ta dodatkowa warstwa ma znaczenie. Ten sam bytecode działa wszędzie tam, gdzie dostępna jest JVM, dlatego "napisz raz, uruchom gdziekolwiek" to skrócona wersja wyjaśnienia, dlaczego Java tak szeroko się rozprzestrzeniła. JVM to element, który sprawia, że ta obietnica staje się prawdą. Plik JAR z modami Fabric działa tak samo, niezależnie od tego, czy gracz korzysta z systemu Windows, macOS czy Linux, ponieważ wszystkie one uruchamiają ten sam bytecode za pomocą tej samej JVM, a JVM zajmuje się różnicami sprzętowymi
JVM, JRE i JDK
Te trzy terminy często się mylą, więc oto rozróżnienie.
| Termin | Co to jest | Kiedy jest potrzebny |
|---|---|---|
| JVM | Silnik, który wykonuje bytecode | Zawsze, aby uruchomić dowolny program Java |
| JRE | JVM plus biblioteki standardowe | Do uruchamiania programów Java |
| JDK | JRE plus kompilator i narzędzia programistyczne | Do tworzenia programów Java |
Gracz potrzebuje tylko środowiska uruchomieniowego do uruchomienia gry. Programista tworzący mod potrzebuje pełnego JDK, aby móc najpierw skompilować Javę do bytecode
Jak JVM uruchamia Twój kod szybko
JVM rozpoczyna działanie od interpretacji kodu bajtowego instrukcja po instrukcji. Podczas działania monitoruje, które metody są wywoływane najczęściej. Te gorące ścieżki przekazywane są do kompilatora JIT, który w locie zamienia je na natywny kod maszynowy. Po rozgrzewce, najbardziej obciążony kod działa z prędkością zbliżoną do natywnej. Dlatego Minecraft przez pierwsze kilka sekund wydaje się zacinający, a następnie stabilizuje się: JIT pracuje w tle.
JVM zarządza również pamięcią. Odzyskujący obiekty garbage collector odzyskuje obiekty, których przestajesz używać, więc nie musisz ręcznie zwalniać pamięci, jak w C. To jeden z powodów, dla których pisanie w Javie jest tak łatwe, a język ten jest popularnym pierwszym językiem dla twórców modyfikacji. Zarządzanie pamięcią jest wbudowane.
Dlaczego to ma znaczenie dla Minecrafta
Minecraft Java Edition działa na JVM, podobnie jak każdy klient i mod, który go targetuje. Własny kod klienta może być napisany w Javie, Kotlinie lub innym języku JVM, ponieważ wszystkie one kompilują się do tego samego kodu bajtowego, który uruchamia JVM. Mod Fabric jest dostarczany jako plik jar zawierający kod bajtowy, ładowacz podłącza go do gry podczas uruchamiania, a JVM uruchamia wszystko jako jeden proces.
Dlatego też launchery pozwalają dostosowywać takie parametry jak rozmiar sterty i wersja Javy. Konfigurujesz JVM, na którym działa gra, a nie samą grę. Zwiększenie pamięci dla JVM oznacza, że Minecraft ma więcej miejsca do działania. Wybór nowszej wersji Javy może przynieść poprawę wydajności, ponieważ nowsze JVM często lepiej optymalizują gorące ścieżki kodu.
FAQ
Nie. Java to język; JVM to środowisko uruchomieniowe, które wykonuje skompilowany wynik. Inne języki, takie jak Kotlin, również kompilują się do kodu bajtowego i działają na tej samej JVM.
Potrzebujesz środowiska uruchomieniowego Java, które zawiera JVM. Wiele programów uruchamiających dołącza je do siebie, więc możesz już je mieć, nie instalując nic osobno.
JVM wykonuje bytecode. JDK to pełny zestaw narzędzi dla programistów, w tym kompilator i narzędzia, które wykorzystujesz do tworzenia programów Java.
Najpierw interpretuje bytecode, a następnie kompilator JIT konwertuje najczęściej używany kod na natywny kod maszynowy w trakcie działania programu. Ten rozruch to koszt startowy; przyspieszenie następuje później.