Mi a JVM? Magyarázd el a JVM-et Architectúra
⚡ Okos összefoglaló
Java A virtuális gép (JVM) egy olyan motor, amely futási környezetet biztosít a meghajtónak Java kód, amely platformfüggetlen bájtkódot konvertál natív gépi nyelvre. A program részét képezi Java Futási környezet és lehetővé teszi Javaegyszer írható, bárhol futtatható hordozhatósága.

Miben van a JVM? Java?
Java Virtuális gép (JVM) egy olyan motor, amely futásidejű környezetet biztosít a Java kód vagy alkalmazások. Átalakítja Java bájtkódot gépi nyelvre. A JVM része a Java Futási környezet (JRE). Más programozási nyelvekben a fordító gépi kódot állít elő egy adott rendszerhez. Azonban a Java A fordítóprogram kódot készít egy virtuális géphez, amelyet ún. Java Virtuális gép.
Hogyan működik a JVM?
Először is, Java a kód bájtkóddá alakul. Ezt a bájtkódot különböző gépek értelmezik. A gazdagép és a Java forrás, a bájtkód egy közvetítő nyelv. JVM a Java felelős a memóriaterület lefoglalásáért.
Működik Java Virtuális gép (JVM)
ArchiJVM (Java virtuális gép)
Most pedig nézzük meg a JVM architektúráját. A JVM architektúra a ...-ban/-ben Java tartalmaz egy osztálybetöltőt, memóriaterületet, végrehajtó motort és egyebeket.
Java Virtuális gép Architectúra
1) ClassLoader
Az osztálybetöltő egy alrendszer, amelyet az osztályfájlok betöltésére használnak. Három fő funkciót lát el: betöltés, csatolás és inicializálás.
2) Módszer terület
A JVM metódusterület olyan osztálystruktúrákat tárol, mint a metaadatok, a konstans futásidejű készlet és a metódusok kódja.
3) Halom
Minden tárgyak, a kapcsolódó példányváltozók és tömbök a kupacban tárolódnak. Ez a memória gyakori és több szálon megosztva.
4) JVM nyelvi verem
Java A nyelvi verem lokális változókat és azok részeredményeit tárolja. Minden szálnak saját JVM verem van, amely a szál létrehozásával egyidejűleg jön létre. Egy új keret jön létre, valahányszor egy metódust meghívnak, és törlődik, amikor a metódus meghívási folyamata befejeződik.
5) PC-regiszterek
A PC regiszter tárolja a címet Java Jelenleg futó virtuálisgép-utasítás. Java, minden szálnak saját külön PC regisztere van.
6) Natív Method Stackek
A natív metódusvermek a natív kód azon utasításait tartalmazzák, amelyek a natív könyvtártól függenek. Egy másik nyelven íródnak a nem natív nyelv helyett. Java.
7) Végrehajtó motor
A végrehajtó motor beolvassa a bájtkódot, és darabonként végrehajtja azt. Egy interpretert és egy Just-In-Time (JIT) fordítót használ a bájtkód natív gépi kóddá alakításához és futtatásához.
8) Natív metódus interfész
A Native Method Interface egy programozási keretrendszer. Megengedi Java egy JVM-ben futó kód, amely natív alkalmazásokhoz és könyvtárakhoz, illetve azok általi meghíváshoz használható.
9) Native Method Libraries
A Native Libraries a natív könyvtárak gyűjteménye (C, C++), amelyekre az Execution Engine-nek szüksége van.
szoftver Code Összeállítási és végrehajtási folyamat
Egy szoftverprogram írásához és futtatásához a következőkre van szükség:
- 1) Szerkesztő – Begépelni a programot; ehhez egy jegyzettömb használható.
- 2) fordítóprogram – Magas szintű nyelven írt programjának natív gépi kóddá alakítása.
- 3) Linker – A főprogram különböző programfájl-hivatkozásainak kombinálása.
- 4) Rakodó – Fájlok betöltése a másodlagos tárolóeszközről, például merevlemezről, pendrive-ról vagy CD-ről a RAM-ba végrehajtás céljából. A betöltés automatikusan megtörténik a kód futtatásakor.
- 5) Végrehajtás – A kód tényleges végrehajtása, amelyet az operációs rendszer és a processzor kezel.
Ezzel a háttérrel tekintse meg a következő videót, és ismerje meg a JVM belső működését és architektúráját (Java Virtuális gép).
Kattints itt ha a videó nem érhető el
C kód Összeállítási és végrehajtási folyamat
Megérteni a Java A fordítási folyamattal kapcsolatban először vessünk egy pillantást a C fordítási és linkelési folyamatára.
Tegyük fel, hogy a főfüggvényben két függvényt hívtunk meg, az f1-et és az f2-t. A főfüggvény az a1.c fájlban található.
Az f1 függvény az a2.c fájlban tárolódik.
Az f2 függvény az a3.c fájlban tárolódik.
Mindezek a fájlok, azaz az a1.c, a2.c és a3.c, a fordítóprogramhoz kerülnek, amelynek kimenete a megfelelő objektumfájlok, amelyek a gépi kódot jelentik.
A következő lépés az összes objektumfájl integrálása egyetlen .exe fájlba egy linker segítségével. A linker egyesíti ezeket a fájlokat, és létrehozza az .exe fájlt.
A program futása során egy betöltőprogram betölti az a.exe fájlt a RAM kivégzéshez.
Java kód Összeállítás és végrehajtás in Java VM
Most pedig nézzük meg a folyamatot, JavaA fő fájlodban két metódus van, az f1 és az f2.
- A main metódus az a1.java fájlban tárolódik.
- Az f1 fájlban a2.java néven van tárolva
- Az f2 fájlban a3.java néven van tárolva
A fordítóprogram lefordítja a három fájlt, és három megfelelő .class fájlt hoz létre, amelyek BYTE kódból állnak. A C-vel ellentétben itt nincs linkelés.
Az Java virtuális gép, vagy Java Virtuális gép, a RAM-ban található. Végrehajtás közben az osztálybetöltő segítségével az osztályfájlok a RAM-ba kerülnek. A BYTE kódot ellenőrzik biztonsági réseket keresve.
Ezután a végrehajtó motor a bájtkódot natív gépi kóddá alakítja. Ez a just-in-time fordítás. Ez az egyik fő oka annak, hogy Java viszonylag lassú.
JEGYZET: A JIT, vagyis a Just-in-time fordító a rendszer része. Java Virtuális gép (JVM). A bájtkód azon részeit értelmezi, amelyek hasonló funkcionalitással rendelkeznek, ugyanakkor.
Miért lett Java tolmácsolt és összeállított nyelv egyaránt?
Programozási nyelvek a következőképpen vannak besorolva:
- Magasabb szintű nyelvek, pl. C++, Java
- Középszintű nyelvek, pl. C
- Alacsony szintű nyelvek, pl. Assembly
- Végül a legalacsonyabb szint, mint a gépi nyelv
A fordítóprogram egy olyan program, amely egy programot egyik nyelvi szintről a másikra konvertál. Például egy C++ gépi kódba programozható. Java a fordító magas szintű konverziókat végez Java kódot bájtkóddá alakít (ami szintén egy gépi kód).
An tolmács egy olyan program, amely egy adott szinten lévő programot egy másik programozási nyelvre konvertál. ugyanaz a szintPéldául egy átalakítása Java programozzon be C++.
In Java, a Just-In-Time kódgenerátor a bájtkódot natív gépi kóddá alakítja, amelyek ugyanazon a programozási szinten vannak. Ezért, Java egyaránt fordított és interpretált nyelv is.
Miért lett Java lassú?
A lassúság mögött meghúzódó két fő ok Java vannak:
- Dinamikus linkelés: A C-vel ellentétben a linkelés futási időben történik, minden alkalommal, amikor a program befut Java.
- Futásidejű tolmács: A bájtkód natív gépi kódká való átalakítása futási időben történik Java, ami tovább lassítja a sebességet.
Azonban a legújabb verziók Java nagymértékben kezelték ezeket a teljesítménybeli szűk keresztmetszeteket.











