Czym jest JVM? Wyjaśnij, czym jest JVM Architektura
⚡ Inteligentne podsumowanie
Java Maszyna wirtualna (JVM) to silnik zapewniający środowisko wykonawcze do obsługi Java kod, konwertujący niezależny od platformy kod bajtowy na natywny język maszynowy. Stanowi część Java Środowisko wykonawcze i umożliwia Javamobilność — napisz raz i uruchom gdziekolwiek chcesz.

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 generuje kod maszynowy dla konkretnego systemu. Jednakże Java kompilator generuje 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. Między systemem hosta a Java Źródło, bajtkod jest językiem pośrednim. JVM w Java odpowiada za przydzielanie przestrzeni pamięci.
Praca z Java Maszyna wirtualna (JVM)
Archiarchitektura JVM (Java Maszyna wirtualna)
Teraz poznajmy architekturę JVM. Architektura JVM w Java zawiera program ładujący klasy, obszar pamięci, moduł wykonujący i wiele innych.
Java Maszyna wirtualna Architektura
1) Moduł ładujący klasy
Ładowarka klas to podsystem służący do ładowania plików klas. Wykonuje trzy główne funkcje: ładowanie, łączenie i inicjalizację.
2) Obszar metody
Obszar metod JVM przechowuje struktury klas, takie jak metadane, stałą pulę wykonawczą 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 po zakończeniu procesu wywoływania metody.
5) Rejestry komputerów
Rejestr PC przechowuje adres Java Instrukcja maszyny wirtualnej, która jest aktualnie wykonywana. W Java, każdy wątek ma swój własny, oddzielny rejestr PC.
6) Stosy metod natywnych
Stosy metod natywnych przechowują instrukcje kodu natywnego, które zależą od biblioteki natywnej. Są one napisane w innym języku, a nie w Java.
7) Silnik wykonawczy
Silnik wykonawczy odczytuje bajtkod i wykonuje go fragment po fragmencie. Używa interpretera i kompilatora Just-In-Time (JIT), aby przekonwertować bajtkod na natywny kod maszynowy i go uruchomić.
8) Interfejs metody natywnej
Natywny interfejs metod jest frameworkiem programistycznym. Pozwala Java kod działający w JVM, który wywołuje aplikacje natywne i biblioteki, i jest przez nie wywoływany.
9) Biblioteki metod natywnych
Biblioteki rodzime to zbiór bibliotek rodzimych (C, C++), które są potrzebne silnikowi wykonawczemu.
Oprogramowanie Code Proces kompilacji i wykonania
Aby napisać i uruchomić program komputerowy, potrzebne są następujące elementy:
- 1) Redaktor – Aby wpisać swój program, można wykorzystać do tego notatnik.
- 2) kompilator – Aby przekonwertować program napisany w języku wysokiego poziomu na natywny kod maszynowy.
- 3) Linker – Aby połączyć różne odwołania do plików programu w programie głównym.
- 4) Ładowarka – Aby załadować pliki z dodatkowego urządzenia pamięci masowej, takiego jak dysk twardy, pendrive lub płyta CD, do pamięci RAM w celu wykonania. Ładowanie odbywa się automatycznie po uruchomieniu kodu.
- 5) Wykonanie – Faktyczne wykonanie kodu, za które odpowiada 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 w tym miejscu jeśli film nie jest dostępny
Proces kompilacji i wykonania kodu C
Aby zrozumieć Java Proces kompilacji, przyjrzyjmy się najpierw pokrótce procesowi kompilacji i łączenia w języku C.
Załóżmy, że w funkcji głównej wywołałeś dwie funkcje: f1 i f2. Funkcja główna 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, trafiają do kompilatora, którego wyjściem są odpowiednie pliki obiektowe, które są kodem maszynowym.
Następnym krokiem jest zintegrowanie wszystkich plików obiektowych w jeden plik .exe za pomocą konsolidatora. Konsolidator połączy wszystkie pliki i utworzy plik .exe.
Podczas działania programu program ładujący załaduje plik a.exe do RAM do wykonania.
Java Kompilacja i wykonanie kodu w Java VM
Przyjrzyjmy się teraz procesowi JavaW swoim main masz dwie metody: f1 i f2.
- Metoda główna jest przechowywana w pliku a1.java
- f1 jest przechowywany w pliku jako a2.java
- f2 jest przechowywany w pliku jako a3.java
Kompilator skompiluje trzy pliki i wygeneruje trzy odpowiadające im pliki .class, które będą zawierały kod BYTE. W przeciwieństwie do języka C, nie stosuje się żadnego linkowania.
Java VM, złoto 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 BAJTOWY jest weryfikowany pod kątem ewentualnych naruszeń bezpieczeństwa.
Następnie silnik wykonawczy konwertuje bajtkod na natywny kod maszynowy. To kompilacja just-in-time. To jeden z głównych powodów, dla których… Java jest stosunkowo powolny.
UWAGA: JIT, czyli kompilator Just-in-time, jest częścią Java Maszyna wirtualna (JVM). Interpretuje fragmenty kodu bajtowego o podobnej funkcjonalności w tym samym czasie.
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, np. Assembly
- Wreszcie najniższy poziom to język maszynowy
A kompilator to program, który konwertuje program z jednego poziomu języka na inny. Na przykład konwersja C++ program w kodzie maszynowym. Java kompilator konwertuje wysokiego poziomu Java kod na kod bajtowy (który jest również rodzajem kodu maszynowego).
An interpretator jest programem, który konwertuje program na jednym poziomie na inny język programowania na tym samym poziomie ten sam poziomNa przykład konwersja Java zaprogramować w C++.
In JavaGenerator kodu Just-In-Time konwertuje bajtkod na natywny kod maszynowy, które znajdują się na tym samym poziomie programowania. W związku z tym, Java jest zarówno językiem kompilowanym, jak i interpretowanym.
Dlaczego Java powolny?
Dwie główne przyczyny powolności Java należą:
- 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 jeszcze bardziej spowalnia prędkość.
Jednak najnowsze wersje Java w dużym stopniu rozwiązano te problemy z wydajnością.











