Hva er Java Virtual Machine og hvordan virker det?

Hva er Java Virtual Machine og hvordan virker det? / Teknologi forklart

Java Virtual Machine (JVM) er et ekte navn dropper når du programmerer i Java. I motsetning til hva navnet angir, kan Java Virtual Machine oppstå i forhold til andre programmeringsspråk også.

Generelt er det ikke nødvendig å vite hva Java Virtual Machine er, eller til og med hva det gjør, for å kunne programmere i Java. På den annen side bidrar du til å gjøre deg kjent med maskinens indre arbeid, for å øke din forståelse og generelle innsikt.

Denne artikkelen børster over ideen om Java Virtual Machine, hva den gjør for deg, og noen av de viktigste fordeler og ulemper. Selv om jeg har forsøkt å holde det enkelt, og det er definitivt mer avansert litteratur om emnet, forventes en rudimentær forståelse av Java og programmering.

Høyt nivå språk

Semantikken til et programmeringsspråk er designet for å være nær vårt naturlige språk, samtidig som det blir konsistent og lett å tolke for en maskin. Som du sikkert vet, er programmeringsspråket helt annet enn maskinkoden, settet med instruksjoner som en datamaskin bruker til å konstruere og kjøre et program. Dette vi kaller språk på høyt nivå; ett eller flere nivåer av abstraksjon fra maskinkoden.

Før det er i stand til å kjøre, må høyt nivå kode tolkes først. Mange programmeringsgrensesnitt kompilere på forhånd (AOT kompilering) for en bestemt plattform. Dette gjør programmet mer effektivt ved kjøring, men langt mindre kompatibelt med ulike plattformer. Java, derimot, fungerer med et mellomliggende språk som kalles Java bytecode og Java Virtual Machine.

JVM og Java Bytecode

Når ditt Java-prosjekt bygger, oversetter det kildekoden (finnes i *.java kildefiler) til Java bytecode (oftest inneholdt i * .class-filer). Dette tar høynivåkoden ditt ett skritt nærmere maskinen, men ikke helt der ennå. Denne bytekoden er en samling av kompakte instruksjoner; lettere for en maskin å tolke, men mindre lesbar.

Når du kjører et Java-program på datamaskinen, mobiltelefonen eller en annen Java-aktivert plattform, sender du i hovedsak denne Java bytecode til Java Virtual Machine. Tolken i Java Virtual Machine begynner vanligvis å kompilere hele bytekoden ved kjøring, etter prinsippene for såkalt just-in-time kompilering. Dette gir den typiske, men ofte små forsinkelsen når du åpner et Java-program, men generelt forbedrer programytelsen i forhold til tolket samling.

Hovedfordelen ved dette systemet er den økte kompatibiliteten. Siden programmene dine kjører i en virtuell maskin i stedet for direkte på maskinvaren din, kan utvikleren programmere og bygge applikasjonen en gang, som deretter kan utføres på alle enheter med implementering av Java Virtual Machine. Dette prinsippet har gitt Java-sloganet: “Skriv en gang, kjør overalt.”

Pro: Kompatibilitet og økt sikkerhet

Bortsett fra kodekompatibilitet, kommer Java Virtual Machine med andre fordeler. En av de viktigste av disse er den relative sikkerheten til Java-programmer som følge av Java Virtual Machine. Sikkerhet, som betyr at et program som kjører i en virtuell maskin, er langt mindre sannsynlig å forstyrre brukerens operativsystem, eller korrupte datafiler, hvis det oppstår feil.

Con: Ulike JVM-implementeringer og feilsøking

En av de viktigste kritikkene som stemte mot kodekompatibiliteten og Java Virtual Machine skyldes de mange forskjellige implementeringer av sistnevnte. Du ser, Java Virtual Machine er ikke ett program. Oracle, eiere av Java, har implementeringen av Java Virtual Machine, men andre kan gjøre deres hvis det oppfyller ulike praktiske og kontraktsmessige krav.

Disse forskjellige implementasjonene betyr at koden din kan kjøre jevnt på en Java Virtual Machine, men krasj og brenne på en annen. Selv om du i praksis kan skrive koden en gang og kjøre den overalt, må en mer komplisert kode noen ganger bli feilsøkt i forskjellige Java Virtual Machine-implementeringer for å sikre korrekt drift.

Har du noen erfaring med å jobbe med Java Virtual Machine? Hvis ja, er det noe jeg savnet her, som bør nevnes?

Bildekreditt: Michaelaw, Dcoetzee

Utforsk mer om: Java, Programmering.