Co to jest JVM? Java Maszyna wirtualna Architektura
Czym jest JVM Java?
Java Maszyna wirtualna (JVM) to silnik zapewniający środowisko wykonawcze do obsługi Java Kod lub aplikacje. Konwertuje Java kod bajtowy na język maszynowy. JVM jest częścią Java Środowisko wykonawcze (JRE). W innych językach programowania kompilator tworzy kod maszynowy dla konkretnego systemu. Jednakże, Java kompilator tworzy kod dla maszyny wirtualnej znanej jako Java Maszyna wirtualna.
Jak działa JVM?
Po pierwsze, Java kod jest kompilowany do bajtkodu. Ten bajtkod jest interpretowany na różnych maszynach. Pomiędzy systemem hosta a Java źródło, Bytecode jest językiem pośrednim. JVM w Java odpowiada za przydzielanie przestrzeni pamięci.

W tym samouczku JVM dowiesz się:
Archiarchitektura JVM (Java Maszyna wirtualna)
Teraz w tym samouczku JVM zrozumiemy Archistruktura JVM. Architektura JVM w Java zawiera moduł ładujący klasy, obszar pamięci, silnik wykonawczy itp.
1) Moduł ładujący klasy
Ładowarka klas jest podsystemem używanym do ładowania plików klas. Wykonuje trzy główne funkcje, tj. ładowanie, łączenie i inicjowanie.
2) Obszar metody
Obszar metod JVM przechowuje struktury klas, takie jak metadane, stała pula środowiska wykonawczego i kod metod.
3) Kupa
Wszystko Obiekty, powiązane z nimi zmienne instancji i tablice są przechowywane na stercie. Ta pamięć jest wspólna i współdzielona przez wiele wątków.
4) Stosy językowe JVM
Java Stosy językowe przechowują zmienne lokalne i ich częściowe wyniki. Każdy wątek ma swój własny stos JVM, tworzony jednocześnie z tworzeniem wątku. Nowa ramka jest tworzona za każdym razem, gdy wywoływana jest metoda, i jest usuwana, gdy proces wywoływania metody jest zakończony.
5) Rejestry komputerów
Rejestr komputera przechowuje adres Java aktualnie wykonywana instrukcja maszyny wirtualnej. W Java, każdy wątek ma swój oddzielny rejestr PC.
6) Stosy metod natywnych
Stosy metod natywnych przechowują instrukcje kodu natywnego zależnego od biblioteki natywnej. Zamiast tego jest napisany w innym języku Java.
7) Silnik wykonawczy
Jest to rodzaj oprogramowania używanego do testowania sprzętu, oprogramowania lub całych systemów. Silnik wykonywania testów nigdy nie przenosi żadnych informacji o testowanym produkcie.
8) Interfejs metody natywnej
Natywny interfejs metod jest frameworkiem programistycznym. Pozwala Java kod działający w maszynie JVM do wywoływania przez biblioteki i aplikacje natywne.
9) Biblioteki metod natywnych
Native Libraries to zbiór bibliotek Native Libraries (C, C++), które są potrzebne silnikowi wykonawczemu.
Proces kompilacji i wykonywania kodu oprogramowania
Aby napisać i uruchomić program komputerowy, potrzebne są następujące elementy:
1) Redaktor – Do wpisania programu można użyć notatnika
2) kompilator – Aby przekonwertować program w języku wysokim na natywny kod maszynowy
3) Linker – Aby połączyć ze sobą różne odniesienia do plików programów w programie głównym.
4) Ładowarka – Aby załadować pliki z dodatkowego urządzenia pamięci masowej, takiego jak dysk twardy, dysk flash lub płyta CD, do pamięci RAM w celu wykonania. Ładowanie odbywa się automatycznie po wykonaniu kodu.
5) Wykonanie – Rzeczywiste wykonanie kodu obsługiwanego przez Twój system operacyjny i procesor.
Mając to na uwadze, zapoznaj się z poniższym filmem i poznaj wewnętrzne działanie i architekturę JVM (Java maszyna wirtualna).
Kliknij tutaj jeśli film nie jest dostępny
Proces kompilacji i wykonania kodu C
Aby zrozumieć Java proces kompilacji w Java. Przyjrzyjmy się najpierw pokrótce procesowi kompilacji i linkowania w języku C.
Załóżmy, że w main wywołałeś dwie funkcje f1 i f2. Funkcja main jest zapisana w pliku a1.c.
Funkcja f1 jest zapisana w pliku a2.c
Funkcja f2 jest zapisana w pliku a3.c
Wszystkie te pliki, tj. a1.c, a2.c i a3.c, są przekazywane do kompilatora. Którego wyjściem są odpowiednie pliki obiektowe, które są kodem maszynowym.
Następnym krokiem jest integracja wszystkich plików obiektowych w jeden plik .exe za pomocą linkera. Linker połączy wszystkie te pliki w jedną całość i utworzy plik .exe.
Podczas działania programu program ładujący załaduje plik .exe do pliku RAM za wykonanie.
Java Kompilacja i wykonanie kodu w Java VM
Teraz, w tym samouczku JVM, przyjrzyjmy się procesowi w Javie. W głównym masz dwie metody f1 i f2.
- Główna metoda jest przechowywana w pliku a1.java
- f1 jest przechowywany w pliku jako a2.java
- f2 jest przechowywany w pliku jako a3.java
Kompilator skompiluje te trzy pliki i utworzy 3 odpowiadające im pliki .class, które składają się z kodu BYTE. W przeciwieństwie do C, nie jest wykonywane żadne łączenie.
Java VM lub Java Maszyna wirtualna znajduje się w pamięci RAM. Podczas wykonywania, za pomocą programu ładującego klasy, pliki klas są przenoszone do pamięci RAM. Kod BYTE jest weryfikowany pod kątem naruszeń bezpieczeństwa.
Następnie silnik wykonawczy przekonwertuje Bytecode na natywny kod maszynowy. To jest kompilacja just in time. To jeden z głównych powodów, dla których Java jest stosunkowo powolny.
UWAGA: JIT lub Kompilator Just-in-time jest częścią pliku Java Maszyna wirtualna (JVM). Interpretuje część kodu bajtowego, która ma jednocześnie podobną funkcjonalność.
Dlaczego Java zarówno język interpretowany, jak i kompilowany?
Języki programowania są klasyfikowane jako
- Język wyższego poziomu np. C++, Java
- Języki średniego poziomu np. C
- Język niskiego poziomu Ex Assembly
- wreszcie najniższy poziom jako język maszynowy.
A kompilator to program, który konwertuje program z jednego poziomu języka na inny. Przykładowa konwersja C++ program do kodu maszynowego. Kompilator Java konwertuje kod Java wysokiego poziomu do kodu bajtowego (który jest również typem kodu maszynowego).
An interpretator jest programem, który konwertuje program na jednym poziomie na inny język programowania na ten sam poziom. Przykładowa konwersja Java zaprogramować w C++
In JavaGenerator kodu Just In Time Code konwertuje bajtkod na natywny kod maszynowy, który znajduje się na tym samym poziomie programowania.
Stąd, Java jest zarówno językiem kompilowanym, jak i interpretowanym.
Dlaczego Java powolny?
Dwie główne przyczyny powolności Java jest
- Linkowanie dynamiczne: W przeciwieństwie do C, łączenie odbywa się w czasie wykonywania, za każdym razem, gdy program jest uruchamiany Java.
- Interpreter czasu wykonania: Konwersja kodu bajtowego na natywny kod maszynowy odbywa się w czasie wykonywania Java co dodatkowo spowalnia prędkość
Jednak najnowsza wersja Java w dużym stopniu rozwiązało problem wąskich gardeł wydajności.
Podsumowanie:
- Pełna forma JVM to Java Maszyna wirtualna. JVM w Java to silnik, który napędza Java Kod. Konwertuje Java kod bajtowy na język maszynowy.
- Architektura JVM w Java zawiera moduł ładujący klasy, obszar pamięci, silnik wykonawczy itp.
- w JVM, Java kod jest kompilowany do kodu bajtowego. Ten kod bajtowy jest interpretowany na różnych komputerach
- JIT oznacza kompilator Just-in-time. JIT jest częścią Java Maszyna wirtualna (JVM). Służy do przyspieszenia czasu wykonywania
- W porównaniu do innych maszyn kompilujących, JVM w Java może być powolny w wykonaniu.