Hvad er Java Virtual Machine og hvordan virker det?

Selvom det ikke er strengt nødvendigt at vide, at det virker for at programmere i Java, er det stadig godt at vide, fordi det kan hjælpe dig med at blive en bedre programmør.

Selvom det ikke er strengt nødvendigt at vide, at det virker for at programmere i Java, er det stadig godt at vide, fordi det kan hjælpe dig med at blive en bedre programmør.
Reklame

Java Virtual Machine (JVM) er et rigtigt navnedispenser, når du programmerer i Java. I modsætning til hvad navnet antyder, kan Java Virtual Machine også ses i forhold til andre programmeringssprog.

Generelt er det ikke nødvendigt at vide, hvad Java Virtual Machine er, eller endda hvad den gør for at kunne programmere i Java. På den anden side hjælper det at øge din forståelse og overordnede indsigt ved at gøre dig bekendt med maskinens indre arbejde.

Denne artikel børsterer over ideen om Java Virtual Machine, hvad det gør for dig, og nogle af de vigtigste fordele og ulemper. Selvom jeg har forsøgt at holde det enkelt, og der er absolut mere avanceret litteratur om emnet, forventes en rudimentær forståelse af Java og programmering.

Højt niveau sprog

Semantikken i et programmeringssprog er designet til at være tæt på vores naturlige sprog, samtidig med at den bliver kortfattet og nem at fortolke for en maskine. Som du sikkert ved, er programmeringssproget helt anderledes end maskinkoden, det sæt instruktioner, en computer bruger til at konstruere og køre et program. Dette kalder vi på højt niveau sprog ; et eller flere niveauer af abstraktion fra maskinkoden.

Før det er i stand til at køre, skal højniveau kode først tolkes. En masse programmeringsinterfaces kompilere på forhånd ( AOT compilation ) til en bestemt platform. Dette gør programmet mere effektivt i runtime, men langt mindre kompatibelt med forskellige platforme. Java arbejder derimod med et mellemliggende sprog kaldet Java bytecode og Java Virtual Machine .

JVM & Java Bytecode

Når dit Java-projekt opbygges, oversætter det kildekoden (indeholdt i * .java kildefiler) til Java bytecode (oftest indeholdt i * .class-filer). Dette tager din højniveau kode et skridt tættere på maskinkoden, men ikke helt der endnu. Denne bytecode er en samling af kompakte instruktioner; lettere for en maskine at fortolke, men mindre læsbar.

Når du kører et Java-program på din computer, mobiltelefon eller anden Java-aktiveret platform, overfører du stort set denne Java bytecode til Java Virtual Machine. Tolken i Java Virtual Machine begynder normalt at kompilere hele byte-koden på kørselstidspunktet, efter principperne for såkaldt just-in-time compilation . Dette giver den typiske, om end ofte mindre forsinkelse, når du åbner en Java-applikation, men forbedrer generelt programets ydeevne sammenlignet med fortolket kompilering .

java virtuelle maskine

Den største fordel ved dette system er den øgede kompatibilitet. Da dine applikationer kører i en virtuel maskine i stedet for direkte på din hardware, kan udvikleren programmere og bygge deres applikation en gang, som derefter kan udføres på hver enhed med en implementering af Java Virtual Machine. Dette princip har givet Java-sloganet: " Skriv en gang, kør overalt ."

Pro: Kompatibilitet og øget sikkerhed

Bortset fra kodekompatibilitet kommer Java Virtual Machine med andre fordele. En af de vigtigste af dem er den relative sikkerhed for Java-programmer som følge af Java Virtual Machine. Sikkerhed, hvilket betyder at et program, der kører i en virtuel maskine, er langt mindre tilbøjelige til at forstyrre brugerens operativsystem eller korrupte datafiler, hvis der opstår fejl.

Con: Forskellige JVM implementeringer og fejlfinding

En af de væsentligste kritikpunkter mod kodekompatibiliteten og Java Virtual Machine skyldes de mange forskellige implementeringer af sidstnævnte. Du ser, Java Virtual Machine er ikke et stykke software. Oracle, ejerne af Java, har deres implementering af Java Virtual Machine, men andre kan gøre deres, hvis det opfylder forskellige praktiske og kontraktmæssige krav.

Disse forskellige implementeringer betyder, at din kode kan køre problemfrit på en Java Virtual Machine, men crash og brænde på en anden. Selvom du i praksis kan skrive din kode en gang og køre den overalt, skal en mere kompleks kode undertiden fikses i forskellige Java Virtual Machine implementeringer for at sikre korrekt drift.

Har du nogen erfaring med at arbejde med Java Virtual Machine? Hvis ja, er der noget jeg savnede her, der skulle nævnes?

Billedkredit: Michaelaw, Dcoetzee

In this article