Java Virtual Machine (JVM), różnica JDK, JRE & JVM – Core Java
Java jest językiem programowania wysokiego poziomu. Program napisany w języku wysokiego poziomu nie może być uruchamiany bezpośrednio na żadnym komputerze. Po pierwsze, musi być przetłumaczone na ten konkretny język maszynowy. Kompilator javac robi to, zabiera program java (.plik java zawierający kod źródłowy) i tłumaczy go na kod maszynowy (zwany kodem bajtowym lub .plik klasowy).,
Java Virtual Machine (JVM) jest maszyną Wirtualną, która znajduje się na prawdziwej maszynie (komputerze), a językiem maszynowym JVM jest kod bajtowy. Ułatwia to kompilatorowi generowanie kodu bajtowego dla JVM, a nie innego kodu maszynowego dla każdego typu maszyny. JVM wykonuje kod bajtowy generowany przez kompilator i wytwarza wyjście. JVM jest Tym, który sprawia, że Platforma java jest niezależna.
tak więc, teraz zrozumieliśmy, że podstawową funkcją JVM jest wykonywanie kodu bajtowego wytwarzanego przez kompilator., Każdy system operacyjny ma inny JVM, jednak wyjście, które wytwarzają po wykonaniu kodu bajtowego, jest takie samo we wszystkich systemach operacyjnych. Co oznacza, że kod bajtowy wygenerowany w systemie Windows może być uruchamiany Na Mac OS i odwrotnie. Dlatego nazywamy Javę językiem niezależnym od platformy. To samo widać na poniższym diagramie:
podsumowując wszystko: wirtualna maszyna Javy (JVM) jest maszyną Wirtualną, która działa na rzeczywistej maszynie (twoim komputerze) i wykonuje kod bajtowy Javy., JVM nie rozumie kodu źródłowego Javy, dlatego musimy mieć kompilator javac, który kompiluje *.pliki java do uzyskania *.pliki klas zawierające kody bajtów rozumiane przez JVM. JVM sprawia, że java jest przenośna (napisz raz, uruchom w dowolnym miejscu). Każdy system operacyjny ma inny JVM, jednak wyjście, które wytwarzają po wykonaniu kodu bajtowego, jest takie samo we wszystkich systemach operacyjnych.
Architektura JVM
pozwala zobaczyć, jak działa JVM:
Class Loader: class loader odczytuje .,plik klasy i zapisz kod bajtowy w obszarze metody.
obszar metod: w JVM jest tylko jeden obszar metod, który jest współdzielony przez wszystkie klasy. Przechowuje to informacje o poziomie klasy każdego z nich .plik klasowy.
Heap: Heap jest częścią pamięci JVM, do której przydzielane są obiekty. JVM tworzy obiekt klasy dla każdego z nich .plik klasowy.
Stack: Stack jest również częścią pamięci JVM, ale w przeciwieństwie do Heap, jest używany do przechowywania zmiennych tymczasowych.
rejestry PC: to śledzi, która instrukcja została wykonana i która ma być wykonana., Ponieważ instrukcje są wykonywane przez wątki, każdy wątek ma osobny rejestr PC.
natywny stos metod: natywna metoda może uzyskać dostęp do obszarów danych runtime maszyny wirtualnej.
Native Method interface: umożliwia wywołanie kodu java lub jego wywołanie przez natywne aplikacje. Aplikacje natywne to programy specyficzne dla sprzętu i systemu operacyjnego systemu.
Garbage collection: instancja klasy jest jawnie tworzona przez kod Javy i po użyciu jest automatycznie niszczona przez garbage collection w celu zarządzania pamięcią.,
JVM Vs JRE Vs JDK
JRE: JRE to środowisko, w którym działa wirtualna maszyna Javy. JRE zawiera Java virtual Machine(JVM), biblioteki klas i inne pliki z wyłączeniem narzędzi programistycznych, takich jak kompilator i debugger.
co oznacza, że możesz uruchomić kod w JRE, ale nie możesz rozwijać i kompilować kodu w JRE.
JVM: jak omówiliśmy powyżej, JVM uruchamia program za pomocą klas, bibliotek i plików dostarczonych przez JRE.,
JDK: JDK jest supersetem JRE, zawiera wszystko, co ma JRE wraz z narzędziami programistycznymi, takimi jak kompilator, debugger itp.