JVM (Java Virtual Machine) er en abstrakt maskine. Det er en specifikation, der giver et runtime-miljø, hvor java bytecode kan udføres.
JVM'er er tilgængelige for mange hardware- og softwareplatforme (dvs. JVM er platformafhængig).
Hvad er JVM
Det er:
- En specifikation hvor funktion af Java Virtual Machine er specificeret. Men implementeringsudbyderen er uafhængig til at vælge algoritmen. Implementeringen er leveret af Oracle og andre virksomheder.
- En implementering Dens implementering er kendt som JRE (Java Runtime Environment).
- Runtime Forekomst Hver gang du skriver java-kommando på kommandoprompten for at køre java-klassen, oprettes en forekomst af JVM.
Hvad det gør
JVM udfører følgende handling:
- Indlæser kode
- Verificerer kode
- Udfører kode
- Giver runtime miljø
JVM giver definitioner for:
- Hukommelsesområde
- Klasse filformat
- Register sæt
- Affaldsbunke
- Fatal fejlrapportering mm.
JVM arkitektur
Lad os forstå den interne arkitektur af JVM. Den indeholder klasseindlæser, hukommelsesområde, udførelsesmotor osv.
1) Klasseindlæser
Classloader er et undersystem af JVM, som bruges til at indlæse klassefiler. Når vi kører java-programmet, indlæses det først af klasseindlæseren. Der er tre indbyggede klasseindlæsere i Java.
//Let's see an example to print the classloader name public class ClassLoaderExample { public static void main(String[] args) { // Let's print the classloader name of current class. //Application/System classloader will load this class Class c=ClassLoaderExample.class; System.out.println(c.getClassLoader()); //If we print the classloader name of String, it will print null because it is an //in-built class which is found in rt.jar, so it is loaded by Bootstrap classloader System.out.println(String.class.getClassLoader()); } }Test det nu
Produktion:
sun.misc.Launcher$AppClassLoader@4e0e2f2a null
Disse er de interne klasseindlæsere leveret af Java. Hvis du vil oprette din egen klasseindlæser, skal du udvide ClassLoader-klassen.
2) Klasse(metode) område
Class(Method) Area gemmer strukturer pr. klasse, såsom runtime-konstantenpuljen, felt- og metodedata, koden for metoder.
3) Hobe
Det er runtime-dataområdet, hvor objekter er allokeret.
4) Stak
Java Stack gemmer rammer. Den indeholder lokale variabler og delresultater og spiller en rolle i metodepåkaldelse og returnering.
Hver tråd har en privat JVM-stack, oprettet samtidig med tråden.
En ny ramme oprettes hver gang en metode påkaldes. En ramme ødelægges, når dens metodekald er fuldført.
5) Programtællerregister
PC-registret (programtæller) indeholder adressen på den virtuelle Java-maskine-instruktion, der i øjeblikket udføres.
6) Native Method Stack
Den indeholder alle de native metoder, der bruges i applikationen.
7) Udførelsesmotor
Det indeholder:
8) Java Native Interface
Java Native Interface (JNI) er en ramme, der giver en grænseflade til at kommunikere med en anden applikation skrevet på et andet sprog som C, C++, Assembly osv. Java bruger JNI framework til at sende output til konsollen eller interagere med OS biblioteker.