Reklame
Java Virtual Machine (JVM) er et ægte navn dropper, når du programmerer i Java. I modsætning til hvad navnet angiver, kan Java Virtual Machine også opstå i forhold til andre programmeringssprog.
Generelt er det ikke nødvendigt at vide, hvad Java Virtual Machine er, eller endda hvad det gør, for at kunne programmere i Java. På den anden side hjælper det med at gøre dig bekendt med en maskins indre funktion til at øge din forståelse og den generelle indsigt.
Denne artikel børster over ideen om Java Virtual Machine, hvad den gør for dig og nogle af de vigtigste fordele og ulemper. Selvom jeg har forsøgt at holde det enkelt, og der er bestemt mere avanceret litteratur om emnet, forventes en rudimentær forståelse af Java og programmering.
Sprog på højt niveau
Semantikken i et programmeringssprog er designet til at være tæt på vores naturlige sprog, mens du forbliver kortfattet og let at fortolke for en maskine. Som du sikkert ved, er programmeringssproget helt forskelligt fra maskinkode, det sæt instruktioner, som en computer bruger til at konstruere og køre et program. Dette kalder vi
sprog på højt niveau; et eller flere abstraktionsniveauer fra maskinkoden.Før den er i stand til at køre, skal kode på højt niveau først fortolkes. En masse programmeringsgrænseflader samles på forhånd (AOT-samling) til en bestemt platform. Dette gør programmet mere effektivt ved runtime, men langt mindre kompatibelt med forskellige platforme. Java, derimod, fungerer med et mellemliggende sprog kaldet Java-bytekode og Java Virtual Machine.
JVM & Java Bytecode
Når dit Java-projekt bygger, oversætter det kildekoden (indeholdt i *.java kilde filer) til Java bytecode (oftest indeholdt i * .klasse filer). Dette fører din kode på højt niveau et skridt nærmere maskinkoden, men ikke helt der endnu. Denne bytekode er en samling af kompakte instruktioner; lettere for en maskine at fortolke, men mindre læselig.
Når du kører et Java-program på din computer, mobiltelefon eller en anden Java-aktiveret platform, overfører du i bund og grund denne Java-bytekode til Java Virtual Machine. Tolken i Java Virtual Machine begynder normalt at sammenstille hele bytekoden under kørsel efter at have fulgt principperne i den såkaldte just-in-time kompilering. Dette giver den typiske, omend ofte svage forsinkelse, når du åbner en Java-applikation, men forbedrer generelt programydelsen sammenlignet med fortolket samling.
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 opbygge deres applikation én gang, som derefter kan udføres på hver enhed med en implementering af Java Virtual Maskine. Dette princip har født Java-sloganet: “Skriv en gang, løb 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 et resultat af Java Virtual Machine. Sikkerhed, hvilket betyder, at et program, der kører i en virtuel maskine, er langt mindre sandsynligt at forstyrre brugerens operativsystem eller ødelægge datafiler, hvis der opstår fejl.
Con: Forskellige JVM-implementeringer og debugging
En af de vigtigste kritikker, der er fremsat mod kodekompatibiliteten og Java Virtual Machine, skyldes de mange forskellige implementeringer af sidstnævnte. Du kan se, Java Virtual Machine er ikke et stykke software. Oracle, ejere af Java, har deres implementering af Java Virtual Machine, men andre mennesker kan lave deres, hvis det opfylder forskellige praktiske og kontraktlige krav.
Disse forskellige implementeringer betyder, at din kode muligvis kører glat på en Java Virtual Machine, men går ned og brændes på en anden. Selvom du i praksis kan skrive din kode én gang og køre den overalt, mere kompleks kode undertiden skal stadig debugges i forskellige Java Virtual Machine-implementeringer for at sikre korrekt drift.
Har du nogen erfaring med at arbejde med Java Virtual Machine? I bekræftende fald, er der noget, jeg har savnet her, som bør nævnes?
Billedkredit: Michaelaw, Dcoetzee
Jeg er forfatter og datalogi fra Belgien. Du kan altid gøre mig en fordel med en god artikelidee, boganbefaling eller opskriftidee.