Co to jest JVM?
Java Virtual Machine (JVM) to mechanizm zapewniający środowisko wykonawcze do obsługi kodu Java lub aplikacji. Konwertuje kod bajtowy Java na język maszynowy. JVM jest częścią środowiska Java Run Environment (JRE). W innych językach programowania kompilator tworzy kod maszynowy dla określonego systemu. Jednak kompilator Java tworzy kod dla maszyny wirtualnej znanej jako maszyna wirtualna Java.
Oto jak działa JVM
Po pierwsze, kod Java jest dostosowywany do kodu bajtowego. Ten kod bajtowy jest interpretowany na różnych komputerach
Między systemem hosta a źródłem Java, Bytecode jest językiem pośredniczącym.
JVM w Javie odpowiada za alokację miejsca w pamięci.
W tym samouczku JVM nauczysz się:
- Architektura JVM
- Proces kompilacji i wykonywania kodu oprogramowania
- Proces kompilacji i wykonywania kodu w języku C.
- Proces kompilacji i wykonywania kodu Java
- Dlaczego język Java jest zarówno interpretowany, jak i kompilowany?
- Dlaczego Java działa wolno?
Architektura JVM
Teraz, w tym samouczku dotyczącym JVM, przyjrzyjmy się architekturze JVM. Architektura JVM w Javie zawiera moduł ładujący klasy, obszar pamięci, silnik wykonawczy itp.1) ClassLoader
Program ładujący klasy jest podsystemem używanym do ładowania plików klas. Pełni trzy główne funkcje, a mianowicie. Ładowanie, łączenie i inicjalizacja.
2) Obszar metod
Obszar metod JVM przechowuje struktury klas, takie jak metadane, stała pula środowiska wykonawczego i kod metod.
3) Sterta
Wszystkie obiekty, powiązane z nimi zmienne instancji i tablice są przechowywane w stercie. Ta pamięć jest wspólna i współdzielona przez wiele wątków.
4) Stosy językowe JVM
Stosy języków Java przechowują zmienne lokalne i ich częściowe wyniki. Każdy wątek ma swój własny stos JVM, tworzony jednocześnie podczas tworzenia wątku. Nowa ramka jest tworzona za każdym razem, gdy wywoływana jest metoda, i jest usuwana po zakończeniu procesu wywołania metody.
5) Rejestry PC
Rejestr PC przechowuje adres instrukcji maszyny wirtualnej Java, która jest aktualnie wykonywana. W Javie każdy wątek ma swój oddzielny rejestr PC.
6) Natywne stosy metod
Stosy metod natywnych przechowują instrukcje kodu natywnego w zależności od biblioteki natywnej. Jest napisany w innym języku zamiast w Javie.
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 zawiera żadnych informacji o testowanym produkcie.
8) Interfejs metody macierzystej
Native Method Interface to platforma programistyczna. Umożliwia to kodowi Java działającemu w JVM na wywoływanie przez biblioteki i aplikacje natywne.
9) Biblioteki metod natywnych
Biblioteki macierzyste to zbiór bibliotek rodzimych (C, C ++), które są wymagane przez aparat wykonawczy.
Proces kompilacji i wykonywania kodu oprogramowania
Aby napisać i uruchomić program, potrzebujesz:
1) Edytor - Aby wpisać program, można użyć do tego notatnika
2) Kompilator - do konwersji twojego programu w wysokim języku na natywny kod maszynowy
3) Linker - Aby połączyć razem różne odniesienia do plików programu w głównym programie.
4) Program ładujący - aby załadować pliki z dodatkowego urządzenia magazynującego, takiego jak dysk twardy, dysk flash, CD do pamięci RAM w celu wykonania. Ładowanie odbywa się automatycznie podczas wykonywania kodu.
5) Wykonanie - Rzeczywiste wykonanie kodu, który jest obsługiwany przez system operacyjny i procesor.
Na tym tle zapoznaj się z poniższym filmem i poznaj wewnętrzne działanie maszyny JVM oraz architekturę JVM (wirtualnej maszyny języka Java).
Kliknij tutaj, jeśli wideo nie jest dostępne
Proces kompilacji i wykonywania kodu w języku C.
Zrozumieć proces kompilacji Java w Javie. Najpierw przyjrzyjmy się procesowi kompilacji i linkowania w C.
Załóżmy, że w głównej części wywołałeś dwie funkcje f1 i f2. Główna funkcja jest przechowywana w pliku a1.c.
Funkcja f1 jest przechowywana w pliku a2.c
Funkcja f2 jest przechowywana 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 zintegrowanie wszystkich tych plików obiektowych w jednym pliku .exe za pomocą konsolidatora. Linker połączy wszystkie te pliki razem i utworzy plik .exe.
Podczas działania programu program ładujący załaduje plik.exe do pamięci RAM w celu wykonania.
Kompilacja i wykonanie kodu Java na maszynie wirtualnej Java
Teraz w tym samouczku dotyczącym JVM przyjrzyjmy się procesowi dla JAVA. W swoim głównym przykładzie 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 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 linkowanie .
Maszyna wirtualna Java lub wirtualna maszyna języka Java 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 wszelkich naruszeń bezpieczeństwa.
Następnie silnik wykonawczy przekształci kod bajtowy w natywny kod maszynowy. To jest kompilacja w samą porę. Jest to jeden z głównych powodów, dla których Java działa stosunkowo wolno.
UWAGA: Kompilator JIT lub Just-in-time jest częścią wirtualnej maszyny języka Java (JVM). Interpretuje część kodu bajtowego, która ma podobną funkcjonalność w tym samym czasie.
Dlaczego Java jest zarówno językiem interpretowanym, jak i skompilowanym?
Języki programowania są klasyfikowane jako- Język wyższego poziomu Ex. C ++, Java
- Języki średniego poziomu Ex. do
- Asemblacja języka niskiego poziomu
- wreszcie najniższy poziom jako język maszynowy.
Kompilator to program, który konwertuje program z jednego poziomu języka na inny. Przykład konwersji programu w C ++ na kod maszynowy.
Kompilator java konwertuje kod Java wysokiego poziomu na kod bajtowy (który jest również typem kodu maszynowego).
Interpreter to program, który konwertuje program na jednym poziomie do innego języka programowania na tym samym poziomie. Przykład konwersji programu Java do C ++
W Javie generator kodu Just In Time konwertuje kod bajtowy na natywny kod maszynowy, który jest na tym samym poziomie programowania.
W związku z tym Java jest zarówno językiem kompilowanym, jak i interpretowanym.
Dlaczego Java działa wolno?
Dwie główne przyczyny powolności Javy to
- Łączenie dynamiczne: w przeciwieństwie do C, łączenie odbywa się w czasie wykonywania, za każdym razem, gdy program jest uruchamiany w Javie.
- Interpreter czasu wykonywania: Konwersja kodu bajtowego na natywny kod maszynowy odbywa się w czasie wykonywania w Javie, co dodatkowo spowalnia prędkość
Jednak najnowsza wersja Java w dużym stopniu rozwiązała problemy z wąskimi gardłami wydajności.
Podsumowanie :
- Pełna forma JVM to Java Virtual Machine. JVM w Javie to silnik, który steruje kodem Java. Konwertuje kod bajtowy Java na język maszynowy.
- Architektura JVM w Javie zawiera moduł ładujący klasy, obszar pamięci, silnik wykonawczy itp.
- W JVM kod Java jest kompilowany do kodu bajtowego. Ten kod bajtowy jest interpretowany na różnych komputerach
- JIT oznacza kompilator Just-in-time. JIT jest częścią wirtualnej maszyny języka Java (JVM). Służy do przyspieszenia czasu wykonania
- W porównaniu z innymi maszynami kompilującymi, JVM w Javie może działać wolno.