Introduksjon til Java Virtual Machine
I denne artikkelen lærer vi om Java Virtual Machine, også kalt “JVM”. Java Virtual Machine er en virtuell maskin som lar et datasystem kjøre / utføre Java-programmer. I utgangspunktet er JVM en motor som fungerer som et runtime-miljø for Java-kode. JVM konverterer java-koden til maskinspråk. Når du kjører en kompilert .klassefil, går den til JVM og deretter returnerer JVM utdataene. Java Virtual Machine er en del av JRE, som står for “Java Runtime Environment”. Grunnoppgaver for en Java Virtual Machine består av å laste inn koden, deretter bekrefte koden og utføre koden. Gi også kjøretidsmiljøet for kodeutførelse. JVM består av forskjellige komponenter som Classloader, Liste over plass tildelt av JVM som Stack, en utførelsesmotor og noen få innfødte biblioteker.
Arkitekturen av Java Virtual Machine 
Som vist på bildet over består Java Virtual Machine Architecture av forskjellige komponenter. La oss lære om hver spesifikke komponent individuelt.
loader
Som navnet antyder er det en komponent som er ansvarlig for lasting av klassefiler. Lasting, kobling og initialisering av en klassefil er hovedfunksjonene i Loader. Lasteren fungerer det i kjøretid.
- Laster: I utgangspunktet leser lasteren .class-filen, genererer deretter den binære koden og lagrer den i et metodeområde. Bootstrap Classloader, Extension Classloader og Application Classloader er de forskjellige ClassLoadere som er ansvarlige for lasting av forskjellige klasser.
- Kobling: Tre hovedfunksjoner som Verifisering, Forberedelse og Løs. Det starter med .klassifisering. Hvis bekreftelsen mislykkes, gir det unntak for bekreftelse av kjøretid. Senere blir Memory fordelt til variablene med standardverdier. Deretter erstattes endelig de symbolske minnereferansene med direkte henvisning fra minneområdet.
- Initialisering: Dette er en siste del av ClassLoader. Originale verdier tilordnes alle de statiske variablene, etterfulgt av utførelsen av statisk blokk. Denne delen utføres fra toppen til bunnen av en klasse.
heap
Detaljer om et objekt- og forekomstvariabler lagres alle her. Det er et delt minneområde, noe som betyr at dataene som er lagret her ikke er trådsikker.
Unntak i tråden “main” java.lang.OutOfMemoryError: Java heap space
En av de mest relatable feilene er unntaket “OutOfMemoryError ”, som betyr at JVM ikke kan tildele et objekt i området Heap, eller at minnetildeling ikke kan gjøres for det samme objektet.
Stable
Det er her en egen runtime-stack opprettes for hver nye tråd. Også kjent som en Run-Time Stack, hver gang en metode blir bedt om, blir alle detaljene lagret i det korresponderende runtime stand, og etter fullført metode blir disse detaljene fjernet fra stacken.
PC-register
For hver enkelt tråd opprettes et eget PC (Program Counter) -register som lagrer adressen til gjeldende utførelsesinstruksjon, som senere vil bli oppdatert med neste instruksjon. Dette minneområdet er ganske lite og har fast størrelse.
Native Method Stack
Det er et av sine egne slags minneområder, som påberopes av en tråd, og så er tråden i et helt nytt nivå der struktur og sikkerhetsbegrensninger implisert av Java Virtual Machine ikke lenger er i trening. Sammenlignet med andre kjøretidsminneområder, har minnet som er opptatt av den originale metodebunken, ingen fast størrelse, uten begrensninger i økning eller reduksjon.
Java Native Interface
JNI samhandler ganske enkelt med de nedenfor nevnte Native Method Libraries som har C, C ++ implementering, og gir det samme til utførelsesmotoren. Direkte tilgang til monteringskode er tillatt av JNI. For en JVM er Java og Native de to typene koder. JNI etablerer jevnlig en veldefinert kobling mellom disse to.
Native Method Libraries
Innsamling av innfødte biblioteker, som kreves av henrettelsesmotoren.
Utførelsesmotor
Nå, nå har vi java-program til bytecode, som blir tilordnet de ovenfor forklarte dataområdene via en klasselaster, og nå vil bytekoden utføres av utførelsesmotoren. Utførelsesmotor leser ganske enkelt bytekoden i enheter, som en maskin som leser kodelinjer en etter en. Bytekoden er et menneskelig-lesbart format, og det er grunnen til at maskinen ikke kan lese den har den er og må konverteres til et maskinlesbar format, der komponentene nedenfor blir brukt til tolkningsformålet.
Utførelsesmotoren har tre hovedkomponenter, som er tolk, JIT-kompilator og en søppeloppsamler.
1. Tolk
Bare kjøres bytekode i en sekvensiell metode. Et anrop foretas av et kommandolinjespørsmål med en kompilert fil som et argument. Tolken er ganske rask med å tolke og utføre kommandoer en etter en, noe som skjer raskere enn JIT-kompilatoren for å kompilere koden.
java klassens navn
En hovedklasse () er must i en samlet .klassefil.
2. JIT Compiler
En av de viktigste komponentene i Java Runtime Environment, som forbedrer Java Application-ytelsen på kjøretid. Ingen andre komponenter har større innvirkning på ytelsen enn JIT Compiler. Dette er en standardkompilator og aktiveres når en hvilken som helst Java-metode heter.
3. Garbage Collector
Som navnet antyder har det noe med søppel å gjøre, Garbage Collector søker ganske enkelt etter alle mulige objekter som er tilgjengelige på JVM-heap-plassen, sjekker om det er i bruk, og sletter deretter de ubrukte. Så det markerer ganske enkelt minnebitene som er i bruk eller ikke. Så fortsetter den å feie, der den ganske enkelt fjerner gjenstanden som er merket. Den beste brukssaken er at det ikke er behov for noe manuelt minnetildelingssystem da Garbage Collector gjør jobben med å fjerne ubrukt minneplass automatisk. Men siden dette er en automatisk oppgave, har ingen programmerer kontroll over planlegging av en tidsluke for spesifikk rengjøringsoppgave og krever mer CPU-kraft når den søker etter objektreferanser.
Konklusjon
Selv om det ikke er obligatorisk å ha en klar forståelse av hvordan JVM fungerer, med det formål å skrive Java-kode, er det utrolig nyttig. For en utvikler som forstår bruken av JVM, vil han skrive bedre og optimalisert kode, uansett hvor lang eller sammensatt kravet er. I tillegg til beskrivelsen gitt her, gir JVM et bredt spekter av funksjoner og teknologier. Disse funksjonene kan brukes til å forbedre ytelsen etter behov av en spesifikk leverandør
Anbefalte artikler
Dette er en guide til Java Virtual Machine. Her diskuterer vi arkitekturen til virtuell java-maskin sammen med de forskjellige komponentene. Du kan også se på følgende artikler for å lære mer -
- Bubble Sorter i JavaScript
- Tråd Livssyklus i Java
- Hva er Java SE?
- Beste Java-kompilatorer
- JRE vs JVM | Topp 8 forskjeller med (Infographics)