JVM - Mi a Java virtuális gép & építészete

Tartalomjegyzék:

Anonim

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.

Java virtuális gép (JVM) működése

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.
Java virtuális gép architektúra

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

  1. 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.
  2. 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.