Vad är Java Virtual Machine och hur fungerar det?

Även om det inte är absolut nödvändigt att veta att det fungerar för att kunna programmera i Java är det fortfarande bra att veta, eftersom det kan hjälpa dig att bli en bättre programmerare.

Även om det inte är absolut nödvändigt att veta att det fungerar för att kunna programmera i Java är det fortfarande bra att veta, eftersom det kan hjälpa dig att bli en bättre programmerare.
Annons

Java Virtual Machine (JVM) är ett riktigt namn dropper när du programmerar i Java. I motsats till vad namnet indikerar kan Java Virtual Machine störas i förhållande till andra programmeringsspråk.

I allmänhet är det inte nödvändigt att veta vad Java Virtual Machine är, eller till och med vad det gör, för att kunna programmera i Java. Å andra sidan, att bekanta sig med maskinens inre arbeten hjälper dig att öka din förståelse och övergripande insikt.

Denna artikel borstar över idén om Java Virtual Machine, vad den gör för dig, och några av de viktigaste fördelarna och nackdelarna. Även om jag har försökt att hålla det enkelt, och det finns definitivt mer avancerad litteratur om ämnet, förväntas en rudimentär förståelse av Java och programmering.

Hög nivå språk

Semantiken i ett programmeringsspråk är utformat för att vara nära vårt naturliga språk, samtidigt som det är koncist och lätt att tolka för en maskin. Som du säkert vet är programmeringsspråket helt annorlunda än maskinkod, uppsättningen instruktioner som en dator använder för att konstruera och köra ett program. Detta kallar vi på hög nivå språk ; en eller flera abstraktionsnivåer från maskinkoden.

Innan den kan köra, måste högkodskoden först tolkas. Många programmeringsgränssnitt kompilerar i förväg ( AOT-kompilering ) för en specifik plattform. Detta gör programmet mer effektivt vid körning men långt mindre kompatibelt med olika plattformar. Java arbetar däremot med ett mellanliggande språk som heter Java bytecode och Java Virtual Machine .

JVM & Java Bytecode

När ditt Java-projekt bygger, översätter det källkoden (som finns i * .java- källfiler) till Java bytecode (oftast innehållet i * .class-filer). Detta tar din högnivå kod ett steg närmare maskinkoden, men inte riktigt där än. Denna bytecode är en samling kompakta instruktioner; lättare för en maskin att tolka men mindre läsbar.

När du kör en Java-applikation på din dator, mobiltelefon eller någon annan Java-aktiverad plattform, skickar du i princip Java-bytekoden till Java Virtual Machine. Tolken i Java Virtual Machine börjar vanligen att kompilera hela bytekoden vid körning, enligt principerna för så kallad just-in-time compilation . Detta medför en typisk, men ofta liten fördröjning när du öppnar en Java-applikation, men förbättrar i allmänhet programets prestanda jämfört med tolkad sammanställning .

java virtuell maskin

Den största fördelen med detta system är den ökade kompatibiliteten. Eftersom dina program körs i en virtuell maskin istället för direkt på din hårdvara, kan utvecklaren programmera och bygga sin applikation en gång, som sedan kan utföras på varje enhet med en implementering av Java Virtual Machine. Denna princip har fött Java-slogan: " Skriv en gång, spring överallt ."

Pro: Kompatibilitet och ökad säkerhet

Bortsett från kodkompatibilitet, kommer Java Virtual Machine med andra fördelar. En av de viktigaste av dessa är den relativa säkerheten för Java-program som ett resultat av Java Virtual Machine. Säkerhet, vilket betyder att ett program som körs i en virtuell maskin är mycket mindre benägna att störa användarens operativsystem eller korrupta datafiler om fel uppstår.

Con: Olika JVM-implementeringar och debugging

En av de viktigaste kritikerna mot kodkompatibiliteten och Java Virtual Machine beror på de många olika implementationerna av den senare. Du förstår, Java Virtual Machine är inte ett program. Oracle, Java-ägare, har sin implementering av Java Virtual Machine, men andra kan göra sitt om de uppfyller olika praktiska och kontraktsliga krav.

Dessa olika implementeringar innebär att din kod kan fungera smidigt på en Java Virtual Machine, men krasch och bränna på en annan. Även om du i praktiken kan skriva din kod en gång och köra den överallt, måste mer komplex kod ibland debuggeras i olika Java Virtual Machine-implementeringar för att säkerställa korrekt drift.

Har du någon erfarenhet av att arbeta med Java Virtual Machine? Om så är fallet, finns det något jag saknat här som bör nämnas?

Bildkredit: Michaelaw, Dcoetzee

In this article