Wat is de Java Virtual Machine en hoe werkt het?
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 gevorderde literatuur over dit 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 is voor een machine. 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 talen op hoog niveau; 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 zijn vooraf samengesteld (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 tussenliggende taal 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 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 prestaties van het programma ten opzichte van geïnterpreteerde compilatie.
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 de slogan van Java doen ontstaan: “Schrijf één keer, 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 er fouten optreden.
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 het 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
Ontdek meer over: Java, Programmeren.