Hvad er JVM? Forklar JVM Architecture
⚡ Smart opsummering
Java Virtuel maskine (JVM) er den motor, der leverer et runtime-miljø til at drive Java kode, der konverterer platformuafhængig bytekode til oprindeligt maskinsprog. Det er en del af Java Runtime Environment og muliggør Java's bærbarhed, der kan skrives én gang og køres overalt.

Hvad er JVM i Java?
Java Virtuel maskine (JVM) er en motor, der giver et driftsmiljø til at køre Java kode eller applikationer. Den konverterer Java bytekode til maskinsprog. JVM er en del af Java Runtime Environment (JRE). I andre programmeringssprog producerer compileren maskinkode til et bestemt system. Imidlertid Java compileren producerer kode til en virtuel maskine kendt som Java Virtuel maskine.
Hvordan fungerer JVM?
First, Java Koden kompileres til bytekode. Denne bytekode fortolkes på forskellige maskiner. Mellem værtssystemet og Java kildekode, bytecode er et mellemliggende sprog. JVM i Java er ansvarlig for at tildele hukommelsesplads.
Arbejde af Java Virtuel maskine (JVM)
Architecture af JVM (Java virtuel maskine)
Lad os nu forstå arkitekturen i JVM. JVM-arkitektur i Java indeholder en klasseindlæser, et hukommelsesområde, en udførelsesmotor og mere.
Java Virtual Machine Architecture
1) ClassLoader
Klasseindlæseren er et undersystem, der bruges til at indlæse klassefiler. Den udfører tre hovedfunktioner, nemlig indlæsning, sammenkædning og initialisering.
2) Metodeområde
JVM-metodeområdet gemmer klassestrukturer som metadata, den konstante runtime-pulje og koden til metoder.
3) Hobe
Alle Objekter, deres relaterede instansvariabler og arrays gemmes i heapen. Denne hukommelse er fælles og deles på tværs af flere tråde.
4) JVM-sprogstakke
Java Sprogstakke gemmer lokale variabler og deres delvise resultater. Hver tråd har sin egen JVM-stak, der oprettes samtidig med at tråden oprettes. En ny frame oprettes, hver gang en metode kaldes, og den slettes, når metodekaldsprocessen er fuldført.
5) PC-registre
PC-registeret gemmer adressen på Java virtuel maskininstruktion, der i øjeblikket udføres. I Java, hver tråd har sit eget separate PC-register.
6) Native Method Stacks
Native metodestakke indeholder instruktioner fra native kode, der afhænger af det native bibliotek. De er skrevet på et andet sprog i stedet for Java.
7) Udførelsesmotor
Udførelsesmotoren læser bytekoden og udfører den stykke for stykke. Den bruger en fortolker og en Just-In-Time (JIT) compiler til at konvertere bytekoden til native maskinkode og køre den.
8) Native metodegrænseflade
Native Method Interface er en programmeringsramme. Det tillader Java kode, der kører i en JVM, for at kalde, og blive kaldt af, native applikationer og biblioteker.
9) Native metodebiblioteker
Native Libraries er en samling af de native biblioteker (C, C++), som er nødvendige for udførelsesmotoren.
Software Code Kompilerings- og udførelsesproces
For at skrive og udføre et softwareprogram skal du bruge følgende:
- 1) Redaktør – Til at skrive dit program ind i; en notesblok kan bruges til dette.
- 2) compiler – At konvertere dit avancerede sprogprogram til native maskinkode.
- 3) Linker – At kombinere de forskellige programfilreferencer i dit hovedprogram.
- 4) Læssemaskine – At indlæse filer fra din sekundære lagerenhed, såsom en harddisk, et flashdrev eller en cd, til RAM til udførelse. Indlæsningen sker automatisk, når du udfører din kode.
- 5) Udførelse – Faktisk udførelse af koden, som håndteres af dit operativsystem og din processor.
Med denne baggrund kan du se følgende video og lære JVM's interne funktion og arkitektur at kende (Java virtuel maskine).
Klik link. hvis videoen ikke er tilgængelig
C-kode kompilerings- og eksekveringsproces
For at forstå Java kompileringsprocessen, lad os først tage et hurtigt kig på kompilerings- og linkningsprocessen i C.
Antag, at du i hovedfunktionen har kaldt to funktioner, f1 og f2. Hovedfunktionen er gemt i filen a1.c.
Funktion f1 er gemt i en fil a2.c.
Funktion f2 er gemt i en fil a3.c.
Alle disse filer, dvs. a1.c, a2.c og a3.c, føres til compileren, hvis output er de tilsvarende objektfiler, som er maskinkoden.
Det næste trin er at integrere alle disse objektfiler i en enkelt .exe-fil ved hjælp af en linker. Linkeren vil samle alle disse filer og producere .exe-filen.
Under programkørslen vil et indlæsningsprogram indlæse en .exe i RAM til udførelse.
Java kode kompilering og eksekvering i Java VM
Lad os nu se på processen for JavaI din hovedmetode har du to metoder, f1 og f2.
- Hovedmetoden er gemt i filen a1.java
- f1 er gemt i en fil som a2.java
- f2 er gemt i en fil som a3.java
Compileren vil kompilere de tre filer og producere tre tilsvarende .class-filer, som består af BYTE-kode. I modsætning til C foretages der ingen linkning.
Java VM, guld Java Virtuel maskine, der findes på RAM'en. Under udførelsen, ved hjælp af klasseindlæseren, overføres klassefilerne til RAM'en. BYTE-koden verificeres for eventuelle sikkerhedsbrud.
Dernæst konverterer eksekveringsmotoren bytekoden til native maskinkode. Dette er just-in-time-kompilering. Det er en af hovedårsagerne til, at Java er forholdsvis langsom.
BEMÆRK VENLIGST: JIT, eller Just-in-time-compileren, er den del af Java Virtuel maskine (JVM). Den fortolker dele af bytekoden, der har lignende funktionalitet på samme tid.
Hvorfor er Java både fortolket og kompileret sprog?
Programmeringssprog er klassificeret som:
- Højere niveau sprog, f.eks. C++, Java
- Mellemniveausprog, f.eks. C
- Lavniveausprog, f.eks. Assembly
- Endelig, det laveste niveau som maskinsproget
A compiler er et program, der konverterer et program fra ét sprogniveau til et andet. For eksempel konverteringen af et C++ program ind i maskinkode. Det Java compiler konverterer på højt niveau Java kode til bytekode (som også er en type maskinkode).
An tolk er et program, der konverterer et program på ét niveau til et andet programmeringssprog på samme niveauFor eksempel konverteringen af en Java program ind C++.
In Java, konverterer Just-In-Time-kodegeneratoren bytekoden til den native maskinkode, som er på de samme programmeringsniveauer. Derfor, Java er både et kompileret og et fortolket sprog.
Hvorfor er Java langsom?
De to hovedårsager bag langsomheden af Java er:
- Dynamisk linking: I modsætning til C, sker linkning ved kørsel, hver gang programmet køres ind Java.
- Run-time Tolk: Konverteringen af bytekode til indbygget maskinkode udføres ved run-time in Java, hvilket yderligere sænker hastigheden.
Imidlertid er de nyeste versioner af Java har i vid udstrækning adresseret disse flaskehalse i ydeevnen.











