Programmering

Hvad er JVM? Introduktion til Java Virtual Machine

Java Virtual Machine er et program, hvis formål er at udføre andre programmer. Det er en simpel idé, der også står som et af vores største eksempler på kodning kung fu. JVM forstyrrede status quo for sin tid og fortsætter med at støtte programmeringsinnovation i dag.

Hvad JVM bruges til

JVM har to primære funktioner: at lade Java-programmer køre på en hvilken som helst enhed eller ethvert operativsystem (kendt som "Skriv en gang, kør hvor som helst" -princippet) og at administrere og optimere programhukommelse. Da Java blev frigivet i 1995, blev alle computerprogrammer skrevet til et bestemt operativsystem, og programhukommelsen blev administreret af softwareudvikleren. Så JVM var en åbenbaring.

JavaWorld /

At have en teknisk definition til JVM er nyttig, og der er også en dagligdags måde, hvorpå softwareudviklere tænker over det. Lad os nedbryde dem:

  • Teknisk definition: JVM er specifikationen for et softwareprogram, der udfører kode og giver runtime-miljøet for den kode.
  • Hverdags definition: JVM kører vores Java-programmer. Vi konfigurerer JVM's indstillinger og stoler derefter på det til at administrere programressourcer under udførelse.

Når udviklere taler om JVM, mener vi normalt den proces, der kører på en maskine, især en server, der repræsenterer og styrer ressourceforbruget til en Java-app. Kontrast dette med JVM-specifikation, der beskriver kravene til opbygning af et program, der udfører disse opgaver.

Hvem udvikler og vedligeholder JVM?

JVM er bredt anvendt, stærkt brugt og vedligeholdt af nogle meget lyse programmører, både corporate og open source. OpenJDK-projektet er afkom af Sun Microsystems beslutning om open source Java. OpenJDK er fortsat gennem Oracles forvaltning af Java, hvor meget af de tunge løft i disse dage er udført af Oracle-ingeniører.

Hukommelsesstyring i JVM

Den mest almindelige interaktion med en kørende JVM er at kontrollere hukommelsesforbruget i bunken og stakken. Den mest almindelige justering er at indstille JVM's hukommelsesindstillinger.

Dagrenovation

Før Java blev al programhukommelse administreret af programmøren. I Java styres programhukommelsen af ​​JVM. JVM styrer hukommelsen gennem en proces kaldet dagrenovation, som kontinuerligt identificerer og fjerner ubrugt hukommelse i Java-programmer. Affaldssamling sker inde i en kørende JVM.

I de tidlige dage kom Java under meget kritik for ikke at være så ”tæt på metallet” som C ++ og derfor ikke så hurtig. Processen til indsamling af affald var især kontroversiel. Siden da er en række algoritmer og tilgange blevet foreslået og brugt til affaldsindsamling. Med konstant udvikling og optimering er affaldsindsamlingen forbedret betydeligt.

Hvad betyder 'tæt på metallet'?

Når programmører siger, at et programmeringssprog eller en platform er "tæt på metallet", mener vi, at udvikleren er i stand til programmatisk (ved at skrive kode) at styre et operativsystems hukommelse. I teorien kan programmører vride mere ydeevne ud af vores programmer ved at bestemme, hvor meget der bruges, og hvornår de skal bortskaffes. I de fleste tilfælde giver delegering af hukommelsesadministration til en meget raffineret proces som JVM bedre ydeevne og færre fejl end at gøre det selv.

JVM i tre dele

Man kan sige, at der er tre aspekter ved JVM: specifikation, implementering og instans. Lad os overveje hver af disse.

1. JVM-specifikationen

For det første er JVM en softwarespecifikation. På en lidt cirkulær måde fremhæver JVM-specifikationen, at dens implementeringsdetaljer er ikke defineret inden for specifikationen for at give maksimal kreativitet i sin realisering:

"For at implementere den virtuelle Java - maskine korrekt behøver du kun være i stand til at læse klasse filformat og udføre de handlinger, der er angivet der korrekt. "

J.S. Bach beskrev engang at skabe musik på samme måde:

"Alt hvad du skal gøre er at røre ved den rigtige tast på det rigtige tidspunkt."

Så alt hvad JVM skal gøre er at køre Java-programmer korrekt. Lyder enkelt, kan endda se simpelt udefra, men det er en massiv opgave, især i betragtning af Java-sprogets kraft og fleksibilitet.

JVM som en virtuel maskine

JVM er en virtuel maskine der kører Java-klassefiler på en bærbar måde. At være en virtuel maskine betyder, at JVM er en abstraktion af en underliggende, faktisk maskine - såsom den server, som dit program kører på. Uanset hvilket operativsystem eller hardware der faktisk er til stede, skaber JVM et forudsigeligt miljø for programmer at køre inden for. I modsætning til en ægte virtuel maskine opretter JVM dog ikke et virtuelt operativsystem. Det ville være mere nøjagtigt at beskrive JVM som en administreret runtime-miljø, eller a behandle virtuel maskine.

2. JVM-implementeringer

Implementering af JVM-specifikationen resulterer i et faktisk softwareprogram, som er en JVM-implementering. Faktisk er der mange JVM-implementeringer, både open source og proprietære. OpenJDKs HotSpot JVM er referenceimplementeringen og forbliver en af ​​de mest grundigt afprøvede kodebaser i verden. HotSpot er også den mest almindelige JVM.

Næsten alle licenserede JVM'er er oprettet som gafler fra OpenJDK og HotSpot JVM, inklusive Oracle's licenserede JDK. Udviklere, der opretter en licenseret fork fra OpenJDK, motiveres ofte af ønsket om at tilføje OS-specifikke præstationsforbedringer. Typisk downloader og installerer du JVM som en samlet del af et Java Runtime Environment (JRE).

3. En JVM-forekomst

Når JVM-spec er implementeret og frigivet som et softwareprodukt, kan du downloade og køre det som et program. Det downloadede program er en forekomst (eller instantieret version) af JVM.

Det meste af tiden, når udviklere taler om "JVM", henviser vi til en JVM-forekomst, der kører i et softwareudviklings- eller produktionsmiljø. Du kan måske sige "Hej Anand, hvor meget hukommelse bruger JVM på den server?" eller "Jeg kan ikke tro, at jeg oprettede et cirkulært opkald, og en stackoverløbsfejl styrtede min JVM. Hvilken nybegynderfejl!"

Hvad er en softwarespecifikation?

EN softwarespecifikation (eller spec) er et menneskeligt læsbart designdokument, der beskriver, hvordan et softwaresystem skal fungere. Formålet med en specifikation er at skabe en klar beskrivelse og krav til ingeniører at kode til.

Indlæser og udfører klassefiler i JVM

Vi har talt om JVM's rolle i kørsel af Java-applikationer, men hvordan udfører den sin funktion? For at køre Java-applikationer afhænger JVM af Java-klasselæsseren og en Java-eksekveringsmotor.

Java-klasselæsseren i JVM

Alt i Java er en klasse, og alle Java-applikationer er bygget fra klasser. En applikation kan bestå af en klasse eller tusinder. For at køre et Java-program skal en JVM indlæse kompilerede .class-filer i en kontekst, f.eks. En server, hvor de er tilgængelige. En JVM afhænger af sin klasselæsser for at udføre denne funktion.

Java-klasselæsseren er den del af JVM, der indlæser klasser i hukommelsen og gør dem tilgængelige til udførelse. Klasselæssere bruger teknikker som lazy-loading og caching for at gøre klassebelastning så effektiv som den kan være. Når det er sagt, er klasseindlæsning ikke den episke hjerne-teaser, som (siger) bærbar runtime-hukommelsesadministration er, så teknikkerne er forholdsvis enkle.

Hver Java Virtual Machine indeholder en klasselæsser. JVM-specifikationen beskriver standardmetoder til forespørgsel og manipulation af klasselæsseren ved kørsel, men JVM-implementeringer er ansvarlige for at udføre disse muligheder. Fra udviklerens perspektiv er de underliggende klasselæssermekanismer typisk en sort boks.

Udførelsesmotoren i JVM

Når klasselæsseren har gjort sit arbejde med at indlæse klasser, begynder JVM at udføre koden i hver klasse. Det udførelsesmotor er JVM-komponenten, der håndterer denne funktion. Udførelsesmotoren er afgørende for den kørende JVM. Faktisk er det til alle praktiske formål JVM-forekomsten.

Udførelse af kode involverer styring af adgang til systemressourcer. JVM-eksekveringsmotoren står mellem det kørende program - med sine krav til fil-, netværks- og hukommelsesressourcer - og operativsystemet, der leverer disse ressourcer.

Hvordan udførelsesmotoren styrer systemressourcer

Systemressourcer kan opdeles i to brede kategorier: hukommelse og alt andet.

Husk på, at JVM er ansvarlig for bortskaffelse af ubrugt hukommelse, og at affaldsindsamling er den mekanisme, der gør denne bortskaffelse. JVM er også ansvarlig for tildeling og vedligeholdelse af referencestruktur som udvikleren tager for givet. Som et eksempel er JVM's eksekveringsmotor ansvarlig for at tage noget som det ny nøgleord i Java og omdanne det til en OS-specifik anmodning om hukommelsestildeling.

Ud over hukommelse administrerer eksekveringsmotoren ressourcer til filsystemadgang og netværk I / O. Da JVM er interoperabel på tværs af operativsystemer, er dette ingen ringe opgave. Ud over hver applikations ressourcebehov skal eksekveringsmotoren være lydhør over for hvert OS-miljø. Sådan er JVM i stand til at håndtere naturenes krav.

JVM-udvikling: Fortid, nutid, fremtid

I 1995 introducerede JVM to revolutionerende koncepter, der siden er blevet standardpris for moderne softwareudvikling: "Skriv en gang, kør hvor som helst" og automatisk hukommelsesstyring. Softwareinteroperabilitet var et dristigt koncept på det tidspunkt, men få udviklere i dag ville tænke to gange over det. På samme måde, mens vores tekniske forfædre selv skulle styre programhukommelsen, voksede min generation op med skraldindsamling.

Vi kunne sige, at James Gosling og Brendan Eich opfandt moderne programmering, men tusinder af andre har forfinet og bygget på deres ideer i de følgende årtier. Mens Java Virtual Machine oprindeligt kun var til Java, har den i dag udviklet sig til at understøtte mange scripting- og programmeringssprog, herunder Scala, Groovy og Kotlin. Ser vi frem, er det svært at se en fremtid, hvor JVM ikke er en fremtrædende del af udviklingslandskabet.

Alt om JVM

  • Java-udfordrere: Trådadfærd i JVM
  • Java-udfordrere: Metodeoverbelastning i JVM
  • Inde i JVM-ydeevneoptimering
  • Grundlæggende om Bytecode: Hvordan JVM håndterer bytecode
  • Java-undtagelser: Hvordan JVM håndterer undtagelser
  • Introduktion til den magre, gennemsnitlige Java-virtuelle maskine

Denne historie, "Hvad er JVM? Introduktion til Java Virtual Machine" blev oprindeligt udgivet af JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found