Wyjaśnienie architektury i komponentów Java [2022]

Opublikowany: 2021-01-04

Zanim zostaniesz programistą Java, musisz zrozumieć każdy aspekt tego języka. Jednym z najważniejszych aspektów Javy jest architektura Javy. Kolejnym technicznym tematem w tym zakresie jest znajomość komponentów JVM. Tak więc omówimy oba te krytyczne tematy w tym artykule.

W tym artykule założono, że masz ogólną wiedzę na temat podstaw Javy. Nawet jeśli nie znasz podstaw Javy, możesz zadać wszelkie pytania w sekcji komentarzy poniżej. Zacznijmy:

Spis treści

Wyjaśnienie architektury Java

Java ma dwa procesy: kompilację i interpretację. Kompilator Java konwertuje kod obecny w Javie na kody bajtowe. Wirtualna maszyna Javy (JVM) konwertuje kody bajtowe na kod maszynowy, który maszyna wykonuje bezpośrednio.

Proces ten możemy opisać w następujących krokach:

  • Kod źródłowy trafia do kompilatora Java
  • Kompilator Java konwertuje je na kody bajtowe
  • Kody bajtowe trafiają do wirtualnej maszyny Java
  • Wreszcie trafia do systemu operacyjnego (systemu operacyjnego)

Teraz, gdy jesteśmy już trochę zaznajomieni z działaniem architektury Java, możemy przyjrzeć się jej różnym komponentom:

JVM (wirtualna maszyna Java)

Twórcy Javy chcieli, aby była to WORA (Write Once Run Anywhere). Oznacza to, że możesz uruchamiać jego aplikacje na dowolnej platformie, ale to, co nadaje Javie tę jakość, to JVM. JVM zapewnia środowisko do wykonywania kodu Java. Interpretuje kod bajtowy i konwertuje go na kod maszynowy, aby maszyna mogła uruchomić program Java.

Ładunki JVM weryfikują i wykonują kod. Zapewnia również środowisko uruchomieniowe do kodu, aby mógł działać w maszynie.

JRE (środowisko wykonawcze Java)

Środowisko JRE buduje środowisko wykonawcze, w którym można uruchamiać programy Java. Pobiera kod Java i łączy to samo z wymaganymi bibliotekami. Środowisko JRE inicjuje również maszynę JVM w celu jej wykonania. Środowisko Java Runtime Environment zawiera wymagane oprogramowanie i biblioteki, dzięki czemu można uruchamiać programy.

JDK (zestaw programistyczny Java)

Używałbyś JDK do tworzenia aplikacji i programów Java. Jest to środowisko programistyczne i zawiera wiele narzędzi programistycznych, w tym JRE, kompilator, interpreter, generator dokumentacji i archiwizator z innymi.

Komponenty JVM

Teraz, gdy znasz już architekturę Javy, przyjrzyjmy się komponentom JVM, abyśmy mogli lepiej ją zrozumieć. Ponieważ JVM wykonuje jedno z najważniejszych zadań dla Javy, ma wiele części do tego celu. Omówimy szczegółowo każdy element:

Podsystem ClassLoader

ClassLoader to podsystem wirtualnej maszyny Javy, który ładuje pliki klas. Jest to pierwszy składnik architektury, który ładuje program, dzięki czemu mogą odbywać się inne zadania. Łączy również i inicjuje pliki klas. Jego działanie możemy podzielić na następujące trzy sekcje:

Ładowanie

Ten składnik ładuje klasy. Posiada BootStrap ClassLoader do ładowania klas należących do ścieżki klas bootstrap. Rozszerzenie ClassLoader ładuje klasy znajdujące się w folderze ext, a ścieżka Application ClassLoader ładuje wspomnianą zmienną środowiskową i podobne pliki.

Łączenie

Tutaj podsystem ma weryfikator, który sprawdza, czy kod bajtowy jest poprawny, czy nie. Jeśli kod bajtowy jest niepoprawny, wygeneruje błąd weryfikacji. Sekcja łącząca alokuje pamięć wszystkich zmiennych statycznych i przypisuje wartości domyślne. Zastępuje także symboliczne odniesienia pamięci na oryginalne.

Inicjalizacja

W tej sekcji ClassLoading system przypisuje zmienne statyczne do oryginalnych wartości i wykonuje blok statyczny.

Obszar danych wykonawczych

Ta sekcja JVM zawiera następujące komponenty:

Obszar metody

Obszar metod przechowuje wszystkie dane na poziomie klasy. Każda maszyna JVM ma tylko jeden obszar metod.

Obszar sterty

Obszar sterty przechowuje wszystkie obiekty oraz ich tablice instancji i zmienne. Podobnie jak obszar metod, JVM ma tylko jeden obszar sterty.

Obszar stosu

Ta sekcja tworzy unikalne stosy środowiska wykonawczego dla każdego zagrożenia i tworzy wpis dla każdego wywołania metody w pamięci stosu (znanej również jako ramka stosu). Ma lokalną tablicę zmiennych, która jest powiązana z metodą, stos operandów, który działa jako obszar roboczy dla operacji pośrednich, oraz dane ramki, gdzie przechowywane są wszystkie symbole związane z metodą. Dane ramki przechowują informacje o bloku catch, chyba że istnieje wyjątek.

Rejestry PC

Każdy wątek ma oddzielne rejestry PC, które przechowują adres uruchomionych instrukcji. Po zakończeniu wykonywania instrukcji, rejestr PC aktualizuje się o następną.

Stosy metod natywnych

Jak sama nazwa wskazuje, w tej sekcji znajdują się informacje o metodzie natywnej. Tworzy unikalny natywny stos metod dla każdego zagrożenia.

Należy zauważyć, że pierwsze dwa składniki obszaru danych środowiska wykonawczego (obszar metod i obszar sterty) są zasobami udostępnionymi, podczas gdy obszar stosu nie jest.

Silnik wykonawczy

Silnik wykonawczy wykonuje kod bajtowy. Czyta i wykonuje go kawałek po kawałku. Posiada również różne składniki:

Interpretator

Ten składnik szybko interpretuje kod bajtowy, ale jest nieco powolny w wykonaniu. Ma to poważną wadę, ponieważ system wielokrotnie wywołuje jedną metodę i za każdym razem wymaga nowej interpretacji. Ta wada tłumacza znacząco obniża wydajność procesu.

Kompilator JIT

Kompilator JIT nie ma wad interpretera. Tak więc, gdy silnik wykonawczy znajdzie powtarzający się kod, używa kompilatora JIT zamiast interpretera. Kompilator JIT po skompilowaniu konwertuje kod bajtowy na kod natywny. System korzysta bezpośrednio z kodu natywnego.

Kompilator JIT ma generator kodu pośredniego do tworzenia kodu pośredniego i optymalizator kodu do jego optymalizacji. Posiada również generator kodu docelowego, który tworzy natywną łanię i profil, który znajduje hotspoty.

Śmieciarz

Ostatnim komponentem silnika wykonawczego jest garbage collector, który gromadzi i usuwa obiekty bez odwołań. Możesz go wyzwolić, wywołując system.gc(), jednak nie gwarantuje to jego wykonania.

Oprócz tych komponentów JVM posiada również JNI (Java Native Interface) i biblioteki metod natywnych. Pierwsza współpracuje z drugą i zapewnia niezbędne biblioteki natywne do wykonania.

Pobierz kurs rozwoju oprogramowania z najlepszych światowych uniwersytetów. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.

Końcowe przemyślenia

Staraliśmy się, aby ten artykuł był zwięzły i pomocny, i jesteśmy pewni, że znalazłeś tę informację. Jeśli masz jakiekolwiek pytania dotyczące komponentów JVM lub architektury Java, możesz zadać nam to samo, kontaktując się z nami poprzez komentarze.

Możesz dowiedzieć się więcej o Javie i jej zastosowaniach na naszym blogu. Mamy wiele pomocnych przewodników i artykułów, które obejmują różne aspekty tego solidnego języka programowania.

Jeśli chcesz dowiedzieć się więcej o Javie, programach OOP i tworzeniu pełnego stosu oprogramowania, zapoznaj się z programem Executive PG UpGrad i IIIT-B w zakresie tworzenia pełnego stosu oprogramowania, który jest przeznaczony dla pracujących profesjonalistów i oferuje ponad 500 godzin rygorystycznego szkolenia, Ponad 9 projektów i zadań, status absolwentów IIIT-B, praktyczne praktyczne projekty zwieńczenia i pomoc w pracy z najlepszymi firmami.

Przygotuj się na karierę przyszłości

Aplikuj teraz na studia magisterskie z inżynierii oprogramowania