Wat is de Java Virtual Machine en hoe werkt het?

Hoewel het niet strikt noodzakelijk is om te weten dat het werkt om te programmeren in Java, is het nog steeds goed om te weten, omdat het kan helpen om een ​​betere programmeur te worden.

Hoewel het niet strikt noodzakelijk is om te weten dat het werkt om te programmeren in Java, is het nog steeds goed om te weten, omdat het kan helpen om een ​​betere programmeur te worden.
Advertentie

De Java Virtual Machine (JVM) is een echte naam-druppelaar wanneer u programmeert in Java. In tegenstelling tot wat de naam aangeeft, kan de Java Virtual Machine ook worden aangetroffen in relatie tot andere programmeertalen.

In het algemeen is het niet nodig om te weten wat de Java Virtual Machine is, of zelfs wat het doet, om in Java te kunnen programmeren. Aan de andere kant, als u zich vertrouwd maakt met de innerlijke werking van een machine, helpt dit om uw begrip en algemeen inzicht te vergroten.

In dit artikel wordt het idee van de Java Virtual Machine afgewogen, wat het voor u doet en enkele van de belangrijkste voor- en nadelen. Hoewel ik heb geprobeerd het simpel te houden, en er is absoluut meer geavanceerde literatuur over het onderwerp, wordt een rudimentair begrip van Java en programmeren verwacht.

High-level talen

De semantiek van een programmeertaal is ontworpen om dicht bij onze natuurlijke taal te zijn, terwijl het beknopt en gemakkelijk te interpreteren voor een machine is. Zoals u waarschijnlijk weet, verschilt de programmeertaal volledig van machinecode, de set instructies die een computer gebruikt om een ​​programma samen te stellen en uit te voeren. Dit noemen we hoog-niveau talen ; een of meerdere niveaus van abstractie van de machinecode.

Voordat het kan worden uitgevoerd, moet code op hoog niveau eerst worden geïnterpreteerd. Veel programmeerinterfaces compileren van tevoren ( AOT-compilatie ) voor een specifiek platform. Dit maakt het programma tijdens runtime efficiënter, maar veel minder compatibel met verschillende platforms. Java daarentegen werkt met een tussentaal, Java bytecode en de Java Virtual Machine .

JVM en Java Bytecode

Wanneer uw Java-project wordt gebouwd, vertaalt het de broncode (opgenomen in * .java -bronbestanden) naar Java bytecode (meestal opgenomen in * .class-bestanden). Hiermee wordt uw code op hoog niveau een stap dichter bij machinecode gebracht, maar nog niet helemaal daar. Deze bytecode is een verzameling compacte instructies; gemakkelijker voor een machine om te interpreteren, maar minder leesbaar.

Wanneer u een Java-toepassing op uw computer, mobiele telefoon of een ander Java-platform uitvoert, geeft u deze Java-bytecode in feite door aan de Java Virtual Machine. De interpreter in de Java Virtual Machine begint meestal met het compileren van de hele bytecode tijdens runtime, volgens de principes van de zogenaamde just-in-time compilatie . Dit zorgt voor de typische, hoewel vaak kleine vertraging bij het openen van een Java-toepassing, maar verbetert over het algemeen de programmeerprestaties in vergelijking met de geïnterpreteerde compilatie .

Java virtuele machine

Het belangrijkste voordeel van dit systeem is de verhoogde compatibiliteit. Omdat uw toepassingen op een virtuele machine worden uitgevoerd in plaats van rechtstreeks op uw hardware, kan de ontwikkelaar één keer zijn applicatie programmeren en bouwen, die vervolgens op elk apparaat kan worden uitgevoerd met een implementatie van de Java Virtual Machine. Dit principe heeft geleid tot de slogan van Java: " Schrijf eens, ren overal ."

Pro: compatibiliteit en verhoogde beveiliging

Afgezien van codecompatibiliteit, heeft de Java Virtual Machine nog andere voordelen. Een van de belangrijkste daarvan is de relatieve beveiliging van Java-programma's als gevolg van de Java Virtual Machine. Beveiliging, wat betekent dat een programma dat op een virtuele machine draait, het besturingssysteem van de gebruiker, of corrupte databestanden, minder snel zal verstoren als zich fouten voordoen.

Con: Verschillende JVM-implementaties en foutopsporing

Een van de belangrijkste kritiekpunten tegen de codecompatibiliteit en de Java Virtual Machine is te wijten aan de vele verschillende implementaties van de laatste. Zie je, de Java Virtual Machine is niet een stukje software. Oracle, de eigenaars van Java, hebben hun implementatie van de Java Virtual Machine, maar andere mensen kunnen de hunne maken als deze voldoet aan verschillende praktische en contractuele claims.

Deze verschillende implementaties betekenen dat uw code soepel kan worden uitgevoerd op één Java Virtual Machine, maar crasht en brandt op een andere. Hoewel u in de praktijk uw code één keer kunt schrijven en overal kunt uitvoeren, moet een meer complexe code soms nog worden gedebugd in verschillende Java Virtual Machine-implementaties om een ​​correcte werking te garanderen.

Heeft u ervaring met het werken met de Java Virtual Machine? Zo ja, is er dan iets dat ik hier heb gemist dat moet worden vermeld?

Beeldcredits: Michaelaw, Dcoetzee

In this article