Mi a JVM?
A Java Virtual Machine (JVM) olyan motor, amely futásidejű környezetet biztosít a Java kód vagy alkalmazások meghajtására. A Java bájtkódot konvertálja gépi nyelvre. A JVM a Java Run Environment (JRE) része. Más programozási nyelveken a fordító gépi kódot állít elő egy adott rendszer számára. A Java fordító azonban kódot állít elő egy Java virtuális gép néven ismert virtuális géphez.
Így működik a JVM
Először a Java kódot bájtkódokká alakítják. Ezt a bájtkódot különböző gépek értelmezik
A gazda rendszer és a Java forrás között a Bytecode egy közvetítő nyelv.
A JVM Java-ban felelős a memóriaterület kiosztásáért.
Ebben a JVM oktatóanyagban megtanulja-
- JVM építészet
- Szoftverkód fordítási és végrehajtási folyamat
- C kód összeállítása és végrehajtása
- Java kód összeállítása és végrehajtása
- Miért értelmezik és fordítják a Java egyszerre?
- Miért lassú a Java?
JVM építészet
Most ebben a JVM oktatóanyagban ismerjük meg a JVM felépítését. A Java JVM architektúrája tartalmazza az osztálytervet, a memória területét, a végrehajtó motort stb.1) ClassLoader
A class loader egy alrendszer, amelyet osztályfájlok betöltésére használnak. Három fő funkciót lát el, nevezetesen. Betöltés, összekapcsolás és inicializálás.
2) Módszer területe
A JVM Method Area olyan osztálystruktúrákat tárol, mint a metaadatok, az állandó futásidejű készlet és a módszerek kódja.
3) Halom
Az összes objektum, a hozzájuk kapcsolódó példányváltozók és tömbök a kupacban vannak tárolva. Ez a memória közös és több szálon megosztott.
4) JVM nyelvi verem
A Java nyelvi veremek a helyi változókat tárolják, és részeredményei vannak. Minden szálnak megvan a saját JVM-vereme, amelyet a szál létrehozásával egyidejűleg hoztak létre. A metódus meghívásakor új keret jön létre, és a metódus meghívási folyamatának befejeztével törlődik.
5) PC-regiszterek
A PC regisztráció tárolja a Java virtuális gép utasításának címét, amely éppen fut. A Java-ban minden szál külön PC-regiszterrel rendelkezik.
6) Natív módszer verem
A natív metódusok a natív kód utasításait tartják a natív könyvtár függvényében. Java helyett egy másik nyelven íródott.
7) Végrehajtó motor
Ez egy olyan típusú szoftver, amelyet hardver, szoftver vagy teljes rendszerek tesztelésére használnak. A teszt végrehajtó motor soha nem hordoz semmilyen információt a tesztelt termékről.
8) Natív módszer interfész
A Native Method Interface egy programozási keretrendszer. Lehetővé teszi, hogy a JVM-ben futó Java-kód könyvtárak és natív alkalmazások által hívható legyen.
9) Natív módszer könyvtárak
A Natív könyvtárak a Natív könyvtárak (C, C ++) gyűjteménye, amelyekre az Execution Engine számára szükség van.
Szoftverkód fordítási és végrehajtási folyamat
Szoftver megírásához és futtatásához a következőkre van szükség
1) Szerkesztő - A program beírásához ehhez egy jegyzettömböt lehet használni
2) Fordító - A magas nyelvű program konvertálása natív gépkóddá
3) Linker - A fő program különböző referenciáinak kombinálása a fő programban.
4) Betöltő - A fájlok betöltése a másodlagos tárolóeszközről, például merevlemezről, flash meghajtóról, CD-ről a RAM-ba végrehajtás céljából. A betöltés automatikusan megtörténik, amikor végrehajtja a kódot.
5) Futtatá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 (Java Virtual Machine) JVM belső működését és architektúráját.
Kattintson ide, ha a videó nem érhető el
C kód összeállítása és végrehajtása
A Java fordítási folyamatának megértése a Java-ban. Először nézzük meg gyorsan a C fordítási és összekapcsolási folyamatát.
Tegyük fel, hogy a fő részben két f1 és f2 függvényt hívtál meg. A fő funkció az a1.c. fájlban van tárolva
Az f1 funkció az a2.c fájlban van tárolva
Az f2 funkció az a3.c fájlban van tárolva
Ezeket a fájlokat, azaz az a1.c, a2.c és a3.c fájlokat a fordító kapja meg. Kinek a kimenete a megfelelő objektumfájl, amely a gép kódja.
A következő lépés az összes objektumfájl integrálása egyetlen .exe fájlba a linker segítségével. A linkelő ezeket a fájlokat összesíti és létrehozza az .exe fájlt.
A program futtatása során egy betöltő program betölti az a.exe fájlt a RAM-ba a végrehajtáshoz.
Java kód összeállítása és végrehajtása Java virtuális gépben
Most ebben a JVM oktatóanyagban nézzük meg a JAVA folyamatát. A fő, két módszer f1 és f2.
- A fő módszert az a1.java fájl tárolja
- Az f1 fájlt a2.java néven tárolja
- Az f2 egy fájlban a3.java néven tárolódik
A fordító lefordítja a három fájlt, és 3 megfelelő .class fájlt állít elő, amely BYTE kódból áll. A C-vel ellentétben nem történik összekapcsolás .
A Java virtuális gép vagy Java virtuális gép a RAM-on található. A végrehajtás során az osztályterhelő használatával az osztályfájlok a RAM-ra kerülnek. A BYTE kódot ellenőrzik a biztonsági előírások megsértése esetén.
Ezután a végrehajtó motor átalakítja a Bytecode-ot natív gépkóddá. Ez éppen időben áll össze. Ez az egyik fő oka annak, hogy a Java viszonylag lassú.
MEGJEGYZÉS: A JIT vagy a Just-in-time fordító a Java virtuális gép (JVM) része. Értelmezi a bájtkód egy részét, amely egyszerre hasonló funkcionalitással rendelkezik.
Miért értelmezett és fordított nyelv a Java?
A programozási nyelveket a következők közé sorolják:- Magasabb szintű nyelv Ex. C ++, Java
- Középszintű nyelvek pl. C
- Alacsony szintű Nyelv Ex Közgyűlés
- végül a legalacsonyabb szint, mint a Gépnyelv.
A fordító olyan program, amely konvertálja a programot a nyelv egyik szintjéről a másikra. Példa a C ++ program konvertálására gépi kódra.
A java fordító a magas szintű java kódot bytecoddá alakítja (ami egyben a gép kódja is).
A tolmács olyan program, amely egy programot egy szinten átalakít egy másik programozási nyelvvé ugyanazon a szinten. Példa Java program konvertálására C ++ formátumra
A Java-ban a Just In Time Code generátor átalakítja a bájtkódot natív gépi kódgá, amelyek azonos programozási szinteken vannak.
Ennélfogva a Java egyszerre fordított és értelmezett nyelv.
Miért lassú a Java?
A Java lassúságának két fő oka az
- Dinamikus összekapcsolás: A C-vel ellentétben a linkelés futás közben történik, minden alkalommal, amikor a program Java-ban fut.
- Futásidejű tolmács: A bájtkód natív gépi kódokká történő átalakítása futási időben történik a Java-ban, ami tovább lassítja a sebességet
A Java legújabb verziója azonban nagymértékben foglalkozott a teljesítmény szűk keresztmetszeteivel.
Összegzés :
- A JVM teljes formája a Java Virtual Machine. A Java JVM az a motor, amely a Java kódot hajtja. A Java bájtkódot konvertálja gépi nyelvre.
- A Java JVM architektúrája tartalmazza az osztálytervet, a memória területét, a végrehajtó motort stb.
- A JVM-ben a Java kódot byte-kódra fordítják. Ezt a bájtkódot különböző gépek értelmezik
- A JIT a Just-in-time fordítót jelenti. A JIT a Java Virtual Machine (JVM) része. A végrehajtási idő felgyorsítására szolgál
- Más fordítógépekhez képest a Java JVM lassú lehet.