Budowanie obrazu natywnego
Kompilacja z wyprzedzeniem
Budowanie obrazu natywnego to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Java Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Java Academy zawiera 4 lekcji w sumie.
Budowanie obrazu natywnego
Narzędzie native-image zamienia skompilowany kod bajtowy Javy w pojedynczy, samodzielny natywny plik wykonywalny. W tej lekcji omówiono proces budowania, to, co dzieje się pod spodem, oraz sposób uruchamiania wyniku.
Zacznij od zwykłej Javy
Obraz natywny powstaje ze zwykłych skompilowanych klas. Załóżmy, że poniższy prosty program zostanie skompilowany do kodu natywnego.
public class Hello {
public static void main(String[] args) {
System.out.println("Hello from a native binary!");
}
}Najpierw kompilacja, potem budowanie
Są to dwa kroki: najpierw javac Hello.java tworzy plik Hello.class, a następnie native-image Hello tworzy plik wykonywalny o nazwie hello. Budowanie trwa znacznie dłużej niż kompilacja, ponieważ analizowany jest cały program.
Analiza zamkniętego świata
native-image wykonuje analizę zamkniętego świata: musi znać cały kod, który kiedykolwiek może zostać uruchomiony. Zaczynając od main, przechodzi przez każdą osiągalną metodę i dołącza do pliku binarnego tylko te metody. Wszystko, co jest nieosiągalne, zostaje usunięte (eliminacja martwego kodu podczas konsolidowania).
Kompilacja z wyprzedzeniem
Osiągalne metody są kompilowane z wyprzedzeniem do natywnego kodu maszynowego. Ponieważ nie pozostaje bajtkod do interpretacji ani JIT, nie ma również rozgrzewania — program działa z pełną szybkością od pierwszej instrukcji.
Inicjalizacja podczas budowania
Aby uruchamiać się szybko, native-image może wykonywać inicjalizatory statyczne w czasie budowania i zapisywać wynikową stertę w obrazie (sterta obrazu). Dzięki temu niektóre obiekty istnieją już w chwili uruchomienia programu.
Uruchamianie pliku wykonywalnego
Wynikiem jest zwykły plik wykonywalny systemu operacyjnego. Uruchamia się go bezpośrednio — bez java -jar i bez konieczności instalowania JVM na maszynie docelowej. W zależności od flag jest on w pełni statycznie linkowany albo w większości statyczny.
Typowe flagi budowania
Przydatne opcje to:
-o name— nazwa pliku wyjściowego.--no-fallback— przerwanie zamiast wygenerowania awaryjnego obrazu zależnego od JVM.-O2/-O3— poziom optymalizacji.--static— w pełni statycznie linkowany plik binarny (Linux).
Pamięć i miejsce na dysku
Samo budowanie wymaga dużo pamięci — duże aplikacje mogą potrzebować kilku gigabajtów RAM-u i minut czasu procesora. Koszt ten ponosi się jednorazowo podczas budowania w zamian za niewielkie koszty zasobowe i szybkie uruchamianie w czasie działania.
Budowanie za pomocą Maven/Gradle
W rzeczywistych projektach rzadko wywołuje się native-image ręcznie. Wtyczki GraalVM native-build-tools integrują je z Mavenem (native:compile) i Gradle (nativeCompile), dzięki czemu plik binarny staje się częścią zwykłego potoku budowania.
Weryfikowanie czasu uruchamiania
Po zbudowaniu należy porównać czas uruchamiania: uruchomienie za pomocą java -jar może trwać setki milisekund, podczas gdy natywny plik binarny uruchamia się w kilku milisekundach. Pomiar tej różnicy jest głównym powodem wyboru rozwiązania natywnego.
Szybki test
Proszę sprawdzić, czy rozumieją Państwo proces budowania obrazów natywnych.
Podsumowanie
Poznali Państwo proces budowania native-image:
- Należy zacząć od skompilowanego kodu bajtowego;
native-imagetworzy samodzielny plik wykonywalny. - Analiza zamkniętego świata odnajduje cały osiągalny kod od
main. - Osiągalny kod jest kompilowany z wyprzedzeniem, a nieosiągalny zostaje usunięty.
- Inicjalizacja podczas budowania zapisuje stertę obrazu, zapewniając szybkie uruchamianie.
- Budowanie jest powolne i wymaga dużo pamięci; należy zintegrować je za pomocą wtyczek Maven/Gradle.
Często zadawane pytania
Czy lekcja „Budowanie obrazu natywnego” jest bezpłatna?
Tak — pełny tekst „Budowanie obrazu natywnego” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Java Academy, przejdź na CoddyKit PRO. Kurs Java Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Budowanie obrazu natywnego”?
Kompilacja z wyprzedzeniem Ćwiczysz Java Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Java Academy?
Nie wymagamy żadnego doświadczenia. Java Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Budowanie obrazu natywnego”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Java Academy?
Tak. Każda lekcja Java Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Czym jest GraalVM
- Budowanie obrazu natywnego
- Refleksja i konfiguracja
- Kompromisy obrazu natywnego