Introduktion til Java Virtual Machine
I denne artikel lærer vi om Java Virtual Machine, også kaldet “JVM”. Java Virtual Machine er en virtuel maskine, der tillader et computersystem at køre / udføre Java-programmer. Grundlæggende er JVM en motor, der fungerer som et runtime-miljø for Java-kode. JVM konverterer java-koden til maskinsprog. Når du kører en kompileret .klassefil, går den til JVM, og derefter returnerer JVM output. Java Virtual Machine er en del af JRE, der står for “Java Runtime Environment”. Grundlæggende opgaver til en Java Virtual Machine består af indlæsning af koden, derefter kontrolleres koden og udfør koden. Angiv også runtime-miljøet til kodeudførelse. JVM består af forskellige komponenter som Classloader, Liste over plads, der er tildelt af JVM som Stack, en Execution Engine og et par indfødte biblioteker.
Arkitekturen af Java Virtual Machine 
Som vist på billedet ovenfor består Java Virtual Machine Architecture af forskellige komponenter. Lad os lære om hver enkelt komponent individuelt.
Loader
Som navnet antyder, er det en komponent, der er ansvarlig for indlæsning af klassefiler. Indlæsning, sammenkobling og initialisering af en klassefil er Loaderens vigtigste funktioner. Læsseren fungerer det i runtime.
- Indlæsning: Grundlæggende læser loader .class-filen, genererer derefter den binære kode og gemmer den i et metodeområde. Bootstrap Classloader, Extension Classloader og Application Classloader er de forskellige ClassLoadere, der er ansvarlige for indlæsning af forskellige klasser.
- Forbindelse: Tre hovedfunktioner som verifikation, forberedelse og løsning. Det starter med .class-verifikation. Hvis bekræftelse mislykkes, giver den undtagelse af bekræftelse af kørselstid. Senere tildeles hukommelse til variablerne med standardværdier. Endelig erstattes de symboliske hukommelsesreferencer med direkte henvisning fra hukommelsesområdet.
- Initialisering: Dette er en sidste del af ClassLoader. Originale værdier tildeles alle de statiske variabler efterfulgt af udførelsen af statisk blok. Denne del udføres fra toppen til bunden af en klasse.
heap
Detaljer om et objekt- og forekomstvariabler gemmes alle her. Det er et delt hukommelsesområde, hvilket betyder, at de data, der er gemt her, ikke er tråd-sikre.
Undtagelse i tråd “main” java.lang.OutOfMemoryError: Java heap space
En af de mest relatable fejl er undtagelsen “OutOfMemoryError ”, hvilket betyder, at JVM ikke kan allokere et objekt i området Heap, eller at hukommelsesallokering ikke kan udføres for det samme objekt.
Stak
Det er her, der oprettes en separat runtime-stack for hver nye tråd. Også kendt som en Run-Time Stack, hver gang en metode kræves, gemmes alle detaljer i det tilsvarende runtime-stand, og efter afslutningen af metoden fjernes disse detaljer fra stacken.
PC-registre
For hver enkelt tråd oprettes et separat PC (Program Counter) -register, der gemmer adressen på den aktuelle eksekveringsinstruktion, som senere opdateres med den næste instruktion. Dette hukommelsesområde er ret lille og har en fast størrelse.
Native Method Stack
Det er et af sin egen form for hukommelsesområde, der påberåbes af en tråd, og derefter er tråden i et helt nyt niveau, hvor struktur- og sikkerhedsbegrænsninger, der impliseres af Java Virtual Machine, ikke længere er i træning. Sammenlignet med andre hukommelsesområder for runtime har hukommelsen, der er optaget af den oprindelige metodestack, ingen fast størrelse uden nogen begrænsninger i stigning eller nedgang.
Java indfødt interface
JNI interagerer simpelthen med nedenstående Native Method Biblioteker, der er med C, C ++ implementering, og leverer det samme til udførelsesmotoren. Direkte adgang til samlingskode er tilladt af JNI. For en JVM er Java og Native de to typer koder. JNI opretter jævnligt en veldefineret forbindelse mellem disse to.
Native Method Biblioteker
Indsamling af indfødte biblioteker, som krævet af eksekveringsmotoren.
Udførelsesmotor
Nå, nu har vi java-program til bytecode, som tildeles de ovennævnte dataområder via en klasselader, og nu udføres bytecoden af eksekveringsmotoren. Execution Engine læser simpelthen bytekoden i enheder, ligesom en maskine læser kodelinjer en efter en. Bytekoden er et menneskeligt læsbart format, hvorfor maskinen ikke kan læse den, den er og er nødt til at konverteres til et maskinlæsbart format, hvor nedenstående komponenter bruges til tolkningsformålet.
Udførelsesmotoren har tre hovedkomponenter, som er tolk, JIT-kompilator og en affaldsopsamler.
1. Tolk
Køres simpelthen bytekoden i en sekventiel metode. Et opkald foretages af en kommandolinjeforespørgsel med en kompileret fil som et argument. Tolken er ret hurtig i at tolke og udføre kommandoer en efter en, hvilket sker hurtigere end JIT-kompilatoren for at kompilere koden.
java klasse navn
En hovedklasse () er et must i en kompileret .klassefil.
2. JIT Compiler
En af de vigtigste komponenter i Java Runtime-miljøet, der forbedrer Java-applikationsydelsen på kørselstidspunktet. Ingen anden komponent har større indflydelse på ydelsen end JIT Compiler. Dette er en standardkompiler og aktiveres, når der kaldes en hvilken som helst Java-metode.
3. Garbage Collector
Som navnet antyder, har det noget med affald at gøre, Garbage Collector søger blot efter alle mulige objekter, der er tilgængelige i JVM-heap-pladsen, kontrollerer, om det er i brug, og sletter derefter de ubrugte. Så det markerer simpelthen de hukommelsesstykker, der er i brug eller ej. Derefter fortsætter den med at feje, hvor den blot fjerner det markerede objekt. Den bedst anvendte sag er, at der ikke kræves noget manuelt allokering af hukommelsessystem, da Garbage Collector automatisk gør det, at ubrugt hukommelsesplads fjernes. Men da dette er en automatisk opgave, har ingen programmerer kontrol over planlægningen af et hvilket som helst tidsvindue til specifikt rengøringsopgave og kræver mere CPU-strøm, når den søger efter objektreferencer.
Konklusion
Selvom det ikke er obligatorisk at have en klar forståelse af, hvordan JVM fungerer, med det formål at skrive Java-kode, er det meget nyttigt. For en udvikler, der forstår, at JVM fungerer, skriver han bedre og optimeret kode, hvor lang eller kompliceret kravet imidlertid er. Udover beskrivelsen leveret her, leverer JVM en bred vifte af funktioner og teknologier. Disse funktioner kan bruges til at forbedre ydelsen efter behov af en bestemt leverandør
Anbefalede artikler
Dette er en guide til Java Virtual Machine. Her diskuterer vi arkitekturen i den virtuelle java-maskine sammen med dens forskellige komponenter. Du kan også se på de følgende artikler for at lære mere -
- Bubble Sorter i JavaScript
- Tråd Livscyklus i Java
- Hvad er Java SE?
- Bedste Java-kompilatorer
- JRE vs JVM | Top 8 forskelle med (Infographics)