JVM | Co to jest Java Virtual Machine i jej architektura

Co to jest JVM?

Java Virtual Machine (JVM) jest silnikiem, który zapewnia środowisko uruchomieniowe dla kodu Java lub aplikacji. Konwertuje ona kod bajtowy Javy na język maszynowy. JVM jest częścią środowiska uruchomieniowego Java (JRE). W innych językach programowania kompilator produkuje kod maszynowy dla konkretnego systemu. Jednak kompilator Javy produkuje kod dla maszyny wirtualnej znanej jako Java Virtual Machine.

Oto jak działa JVM

Po pierwsze, kod Java jest kompilowany do kodu bajtowego. Ten bajtkod jest interpretowany na różnych maszynach

Pomiędzy systemem hosta a źródłem Java, bajtkod jest językiem pośrednim.

JVM w Javie jest odpowiedzialny za przydzielanie przestrzeni pamięci.

Jak działa JVM
Praca m.in. of Java Virtual Machine (JVM)

W tym poradniku JVM, dowiesz się-

  • Architektura JVM
  • Kompilacja kodu oprogramowania & Proces wykonania
  • Kompilacja kodu C i proces wykonania
  • Kompilacja kodu Java i proces wykonania
  • Dlaczego Java jest zarówno językiem interpretowanym jak i kompilowanym?
  • Dlaczego Java jest powolna?

Architektura JVM

Teraz w tym tutorialu JVM, zrozumiemy architekturę JVM. Architektura JVM w Javie zawiera classloader, obszar pamięci, silnik wykonawczy itp.

Architektura JVM
Architektura wirtualnej maszyny Javy

1) ClassLoader

Ładowacz klas to podsystem służący do ładowania plików klas. Wykonuje on trzy główne funkcje viz. ładowanie, łączenie i inicjalizację.

2) Method Area

JVM Method Area przechowuje struktury klas takie jak metadane, pulę stałych runtime oraz kod metod.

3) Sterta

Wszystkie obiekty, powiązane z nimi zmienne instancji i tablice są przechowywane w stercie. Pamięć ta jest wspólna i współdzielona przez wiele wątków.

4) Stosy języka JVM

Zestawy języka Java 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 przy każdym wywołaniu metody, a usuwana po zakończeniu procesu wywoływania metody.

5) Rejestry PC

Rejestry PC przechowują adres instrukcji maszyny wirtualnej Javy, która jest aktualnie wykonywana. W Javie każdy wątek ma swój osobny rejestr PC.

6) Stosy metod natywnych

Stosy metod natywnych przechowują instrukcje kodu natywnego zależne od biblioteki natywnej. Jest on napisany w innym języku niż Java.

7) Execution Engine

Jest to rodzaj oprogramowania używanego do testowania sprzętu, oprogramowania lub kompletnych systemów. Silnik wykonawczy testu nigdy nie przenosi żadnych informacji o testowanym produkcie.

8) Interfejs metod natywnych

Interfejs metod natywnych to framework programistyczny. Pozwala on kodowi Java, który jest uruchomiony w JVM, na wywoływanie przez biblioteki i aplikacje natywne.

9) Native Method Libraries

Native Libraries to zbiór bibliotek natywnych (C, C++), które są potrzebne dla silnika wykonawczego.

Kompilacja kodu oprogramowania & Proces wykonania

Aby napisać i wykonać program, potrzebujesz następujących rzeczy

1) Edytor – Do wpisania swojego programu, Notatnik może być do tego użyty

2) Kompilator – Do konwersji twojego programu w języku wysokiego poziomu na natywny kod maszynowy

3) Linker – Do połączenia różnych plików programu w twoim głównym programie razem.

4) Loader – Aby załadować pliki z twojego wtórnego urządzenia pamięci masowej, takiego jak dysk twardy, pendrive, CD do pamięci RAM w celu wykonania. Ładowanie odbywa się automatycznie, gdy wykonujesz swój kod.

5) Wykonanie – Rzeczywiste wykonanie kodu, które jest obsługiwane przez twój system operacyjny & procesor.

Z tym tłem, odnieś się do następującego wideo & poznaj wewnętrzną pracę i architekturę JVM (Java Virtual Machine).

Kliknij tutaj, jeśli wideo nie jest dostępne

Kod C Proces kompilacji i wykonywania

Aby zrozumieć proces kompilacji w Javie. Przyjrzyjmy się najpierw szybko procesowi kompilacji i linkowania w C.

Załóżmy, że w main, masz wywołane dwie funkcje f1 i f2. Główna funkcja jest przechowywana w pliku a1.c.

Praca maszyny wirtualnej Java (JVM) jej architektura

Funkcja f1 jest przechowywana w pliku a2.c

Working of Java Virtual Machine(JVM) its Architecture

Funkcja f2 jest przechowywana w pliku a3.c

Working of Java Virtual Machine(JVM) its Architecture

Wszystkie te pliki, czyli, a1.c, a2.c, i a3.c, są przekazywane do kompilatora. Którego wyjściem są odpowiednie pliki obiektowe, które są kodem maszynowym.

Working of Java Virtual Machine(JVM) its Architecture

Kolejnym krokiem jest integracja wszystkich tych plików obiektowych w jeden plik .exe za pomocą linkera. Linker połączy wszystkie te pliki razem i wyprodukuje plik .exe.

Praca maszyny wirtualnej Java (JVM) jej architektura

Podczas uruchamiania programu, program ładujący załaduje plik .exe do pamięci RAM w celu wykonania.

Pracowanie wirtualnej maszyny Javy (JVM) jej architektura

Kompilacja kodu Javy i jego wykonywanie w maszynie wirtualnej Javy

Teraz w tym tutorialu JVM, przyjrzyjmy się procesowi dla JAVY. W twoim main, masz dwie metody f1 i f2.

  • Główna metoda jest przechowywana w pliku a1.java
  • f1 jest przechowywana w pliku jako a2.java
  • f2 jest przechowywana w pliku jako a3.java

Praca maszyny wirtualnej Java (JVM) jej architektura

Kompilator skompiluje trzy pliki i wyprodukuje 3 odpowiadające im pliki .class, które składają się z kodu BYTE. W przeciwieństwie do C, nie jest wykonywane łączenie.

Maszyna wirtualna Java lub Java Virtual Machine rezyduje w pamięci RAM. Podczas wykonywania, używając programu ładującego klasy, pliki klas są przenoszone do pamięci RAM. Kod BYTE jest weryfikowany pod kątem naruszeń bezpieczeństwa.

Working of Java Virtual Machine(JVM) its Architecture

Następnie, silnik wykonawczy przekonwertuje Bytecode na Native machine code. To jest właśnie kompilacja w czasie. Jest to jeden z głównych powodów, dla których Java jest stosunkowo powolna.

Praca wirtualnej maszyny Javy (JVM) jej architektura

UWAGA: Kompilator JIT lub Just-in-time jest częścią wirtualnej maszyny Javy (JVM). Interpretuje część kodu bajtowego, który ma podobną funkcjonalność w tym samym czasie.

Dlaczego Java jest zarówno językiem interpretowanym jak i kompilowanym?

Języki programowania są klasyfikowane jako

  • Języki wyższego poziomu, np. C++, Java
  • Middle-Level Languages Ex. C
  • Low-Level Language Ex Assembly
  • kończąc na najniższym poziomie, jakim jest język maszynowy.

Kompilator jest programem, który konwertuje program z jednego poziomu języka na inny. Przykładem może być konwersja programu C++ na kod maszynowy.

Kompilator java konwertuje wysokopoziomowy kod java na kod bajtowy (który również jest rodzajem kodu maszynowego).

Interpreter to program, który konwertuje program na jednym poziomie na inny język programowania na tym samym poziomie. Przykład konwersji programu Java na C++

W Javie generator Just In Time Code konwertuje kod bajtowy na natywny kod maszynowy, które są na tych samych poziomach programowania.

Więc, Java jest zarówno językiem kompilowanym jak i interpretowanym.

Dlaczego Java jest powolna?

Dwa główne powody powolności Javy to

  1. Dynamiczne łączenie: W przeciwieństwie do C, łączenie odbywa się w czasie wykonywania, za każdym razem, gdy program jest uruchamiany w Javie.
  2. Interpreter czasu działania: Konwersja kodu bajtowego na natywny kod maszynowy jest wykonywana w czasie wykonywania programu w Javie, co jeszcze bardziej spowalnia prędkość

Jednakże najnowsza wersja Javy w dużym stopniu rozwiązała problem wąskich gardeł wydajności.

Podsumowanie:

  • Pełna forma JVM to Java Virtual Machine. JVM w Javie jest silnikiem, który napędza kod Javy. Konwertuje on kod bajtowy Javy na język maszynowy.
  • Architektura JVM w Javie zawiera classloader, obszar pamięci, silnik wykonawczy itp.
  • W JVM, kod Javy jest kompilowany do kodu bajtowego. Ten bajtkod jest interpretowany na różnych maszynach
  • JIT jest skrótem od Just-in-time compiler. JIT jest częścią wirtualnej maszyny Javy (JVM). Jest on używany do przyspieszenia czasu wykonania
  • W porównaniu z innymi kompilatorami, JVM w Javie może być wolna w wykonaniu.

.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *