Co to jest JVM?

JVM to specyfikacja, w której szczegółowo opisano działanie wirtualnej maszyny Java. Jednak algorytm jest niezależną tożsamością wybieraną tylko przez dostawcę implementacji, takiego jak Oracle i inne renomowane firmy. Jako taki, JVM jest implementacją znaną jako Java Runtime Environment (JRE).

Definicja

Jest zdefiniowany jako opis oprogramowania oferującego środowisko wykonawcze dla kodu i jego znaczące wykonanie. Innymi słowy, w ten sposób uruchamiamy Programy Java - konfigurując ustawienia JVM i polegając na nim, aby radzić sobie z zasobami programu podczas wykonywania.

Zrozumienie

Java jest znana jako niezależna od platformy ze względu na wirtualną maszynę Java. Gdy przesyłanie odbywa się na różnych komputerach z innym systemem operacyjnym wyposażonym w JVM, kod bajtowy jest interpretowany przez JVM na język maszynowy. Mówiąc ściślej, programy JVM są napisane w języku programowania C, a JVM jest niezależny od systemu operacyjnego. Jest to kluczowy element architektury Java.

Poza tym odpowiada za przydzielanie niezbędnej pamięci wymaganej przez program Java. Odpowiada również za zabronienie miejsca w pamięci.

Co to robi?

Najważniejsze operacje wykonywane przez JVM są następujące:

  • Ładowanie kodu
  • Weryfikacja kodu
  • Wykonanie kodu
  • Zapewnienie środowiska wykonawczego

Oprócz tego wszystkiego, wprowadza klasyfikacje dla formatu pliku klasy, obszaru pamięci, sterty śmieci, zestawu rejestrów, raportowania błędów krytycznych itp.

Architektura JVM

Uzyskajmy kilka kluczowych informacji na temat wewnętrznej architektury JVM, która obejmuje:

1. Classloader

Jest to podsystem JVM używany do ładowania plików klas. Podczas uruchamiania programu Java najpierw zostaje załadowany przez moduł ładujący klasy. Trzy moduły ładujące, które zawiera Java, są następujące:

a) Bootstrap ClassLoader

Jest to nadklasa modułu ładującego klasy Extension. Pomaga w ładowaniu plików rt.jar, które przenoszą wszystkie pliki klas.

b) Rozszerzenie ClassLoader

Jest to nadrzędny moduł ładujący klasy Systemloader i podrzędny moduł ładujący Bootstrap. Pliki jar w katalogu $ JAVA_HOME / jre / lib / ext można wyodrębnić za pomocą rozszerzenia ClassLoader.

C) System / moduł ładujący klasy aplikacji

Jest to potomek modułu ładującego klasy rozszerzenia zwanego także modułem ładującym klasy aplikacji. Pliki klas ze ścieżki klasy można przez nią wyodrębnić. Ścieżkę klasy, która jest ustawiona na bieżący katalog, można domyślnie zmienić za pomocą przełącznika „-cp” lub „-classpath”.

2. Obszar klasy (metody)

Struktury przedklasowe, takie jak dane pól i metod, pula stałych środowiska wykonawczego oraz kod metod są przechowywane w obszarze klasy (metody). Jest to pamięć tworzona podczas uruchamiania JVM i współdzielona przez wszystkie wątki, takie jak Heap.

3. Kupa

Obiekty są przypisywane przez ten użyteczny obszar danych środowiska wykonawczego. Jest to miejsce pamięci przechowujące obiekty wraz ze zmiennymi instancji. Ilekroć obiekt jest tworzony w Javie, trafia na stertę - obszar pamięci.

4. Stack

Oprócz przechowywania ramek Java Stack zawiera zmienne i częściowe wyniki. Odgrywa także kluczową rolę w metodzie, wywoływaniu i zwracaniu. Każdy pojedynczy wątek składa się z prywatnego stosu JVM, utworzonego w tym samym czasie co wątek. Za każdym razem, gdy metoda ulega eskalacji, generowana jest nowa ramka, która jest niszczona po zakończeniu wywołania metody.

5. Zarejestruj licznik programów (PC)

Rejestr komputera zawiera adres instrukcji JVM w momencie jego wykonania. Śledząc instrukcje, ma wartość dla każdej instrukcji, która jest niezdefiniowana dla metod natywnych.

6. Natywny stos metod

Procedury macierzyste używane w aplikacjach są częścią stosu metod macierzystych. Te metody są napisane w językach innych niż Java. W powiązaniu z każdym wątkiem implementacje JVM nie mogą polegać na konwencjonalnych stosach i nie mogą ładować metod natywnych. Mówiąc dokładniej, jest podobny do stosu, ale jest używany w metodach natywnych.

7. Silnik

Będąc kluczowym aspektem JVM, komunikuje się z różnymi obszarami pamięci. To zawiera:

za. Śmieciarz

Odgrywa to istotną rolę w systemie dynamicznego zarządzania pamięcią JVM. Pamięć, która jest zajęta i do której nie ma już żadnego dostępnego obiektu Java, jest uwalniana przez Garbage Collector.

b. Interpretator

Wykonuje instrukcje po odczytaniu strumienia kodu bajtowego.

do. Kompilator Just-In-Time (JIT)

Umożliwiając zwiększenie wydajności, kompilator JIT kompiluje części kodu bajtowego o podobnej funkcjonalności w tym samym czasie. Pomaga w skróceniu czasu potrzebnego na proces kompilacji.

8. Java Native Interface (JNI)

Aplikacje napisane w innych językach, np. C, C ++, Asembler itp., Mogą być połączone z interfejsem dostarczonym przez JNI. Struktura JNI jest używana przez Javę do interakcji z bibliotekami systemu operacyjnego lub do wysyłania danych wyjściowych do konsoli.

Jakie jest zastosowanie JVM?

JVM ma dwie podstawowe funkcje: umożliwia uruchamianie programów Java na dowolnym urządzeniu lub systemie operacyjnym (znaną jako zasada „Napisz raz, uruchom gdziekolwiek”) oraz zarządzać pamięcią programu i optymalizować ją.

Zalety i wady

Programy Java są poprawnie wykonywane przez JVM. Kod bajtowy - język pośredni służy do kompilacji programów Java, a następnie jest wykonywany przez JVM. Każdy program, który jest kompilowany do kodu bajtowego, może być wykonywany przez dowolną platformę napędzaną przez JVM. Dzięki temu oprogramowanie Java jest bardziej efektywne i kompatybilne na różnych platformach komputerowych. JVM ma kilka znaczących zalet i wad, które każdy programista powinien dokładnie rozważyć przed zainwestowaniem w rozwój Java.

1. Bezpieczeństwo

Za pomocą mechanizmów bezpieczeństwa JVM programiści mogą skutecznie pisać wysokiej klasy zabezpieczone programy Java. Zapewnia zasoby systemu operacyjnego do identyfikacji złośliwego oprogramowania, a także pomaga odpowiednio zapobiegać.

2. Wydajność

Programy Java działające na JVM mogą oferować wolniejsze działanie w porównaniu do programów napisanych w C ++. Wynika to z optymalizacji kodu, która nadmiernie opiera się na różnych funkcjach specyficznych dla systemu. Ponadto kodu bajtowego Java nie można zoptymalizować dla określonego zestawu sprzętu, ponieważ jest on neutralny dla systemu.

3. Poprawność

Prawidłowy jest program, który działa skutecznie i w pełni spełnia oczekiwania użytkownika. Wbudowane funkcje JVM umożliwiają prawidłowe działanie i brak błędów.

Dlaczego powinniśmy korzystać z JVM?

Pomimo posiadania kodu składniowego Java, JVM może działać w różnych programach językowych. Kilka powodów, dla których jest tak szeroko stosowany i dlaczego warto go używać na różnych platformach, wymieniono poniżej:

Wykorzystuje pamięć sterty: pamięć sterty jest kluczowym składnikiem używanym do dynamicznego przydzielania pamięci do definiowania klas i inicjalizacji obiektów, a ponieważ JVM obsługuje pamięć sterty, ma szeroką akceptację.

Zapewnienie bezpieczeństwa dla Zdalnej lokalizacji kodu: Framework JVM jest zaprojektowany w taki sposób, że zdalna aplikacja jest łatwa do wykonania. Teorię tę stosuje się do uruchamiania apletu Java.

Wniosek

Fakt, że JVM działa na wielu systemach operacyjnych, daje aprobatę w dziedzinie technologii. Korzystając z niego w systemie Windows, Linux i innych systemach operacyjnych, można przekształcić kod bajtowy niezależnie od sprzętu i systemu operacyjnego, który ma zostać uruchomiony. Ponadto jego zdolność do zapewnienia bezpieczeństwa komputerowi hostowi poprzez zabezpieczenie danych i programu to kolejny powód, dla którego JVM odnosiła tak duże sukcesy w przeszłości i nadal dominuje w przyszłości.

Polecane artykuły

To był przewodnik po JVM (Java Virtual Machine). Omówiliśmy podstawowe pojęcia z listą architektury i zastosowań JVM. Możesz także przejrzeć nasze inne sugerowane artykuły, aby dowiedzieć się więcej -

  1. Najlepsze ramy JavaScript
  2. Jest zorientowany obiektowo na Python
  3. Aplikacje C ++ w prawdziwym świecie
  4. Kariera w ASP.NET
  5. JRE vs JVM | 8 najważniejszych różnic z (Infografika)