Wat is JVM? Leg JVM uit. Architectuur
โก Slimme samenvatting
Java De Java Virtual Machine (JVM) is de engine die een runtime-omgeving biedt voor het aansturen van programma's. Java code, die platformonafhankelijke bytecode omzet in native machinetaal. Het maakt deel uit van de Java Runtimeomgeving en maakt dit mogelijk JavaDe draagbaarheid van 's: schrijf eenmalig, voer overal uit.

Wat is JVM in Java?
Java Virtuele machine (JVM) is een engine die een runtime-omgeving biedt om de Java code of applicaties. Het converteert Java bytecode in machinetaal. JVM maakt deel uit van de Java Runtimeomgeving (JRE). In andere programmeertalen produceert de compiler machinecode voor een specifiek systeem. Echter, de Java De compiler produceert code voor een virtuele machine, ook wel de virtuele machine genoemd. Java Virtuele machine.
Hoe werkt JVM?
Eerste, Java De code wordt gecompileerd naar bytecode. Deze bytecode wordt op verschillende machines geรฏnterpreteerd. Tussen het hostsysteem en de computer vindt de communicatie plaats. Java De broncode, bytecode, is een tussenliggende taal. JVM in Java is verantwoordelijk voor het toewijzen van geheugenruimte.
Werken van Java Virtuele machine (JVM)
Archistructuur van JVM (Java Virtuele machine)
Laten we nu de architectuur van de JVM eens nader bekijken. De JVM-architectuur in Java Bevat een classloader, geheugenruimte, uitvoeringsengine en meer.
Java Virtuele machine Architectuur
1) KlasseLoader
De class loader is een subsysteem dat wordt gebruikt voor het laden van klassebestanden. Het voert drie hoofdfuncties uit: laden, linken en initialiseren.
2) Methodegebied
Het JVM-methodegebied slaat klassenstructuren op, zoals metadata, de constante runtimepool en de code voor methoden.
3) Hoop
Alle Objecten, worden hun gerelateerde instantievariabelen en arrays opgeslagen in de heap. Dit geheugen is gebruikelijk en wordt gedeeld door meerdere threads.
4) JVM-taalstacks
Java Taalstacks slaan lokale variabelen en hun gedeeltelijke resultaten op. Elke thread heeft zijn eigen JVM-stack, die tegelijk met de thread wordt aangemaakt. Er wordt een nieuw frame aangemaakt wanneer een methode wordt aangeroepen en het frame wordt verwijderd wanneer het aanroepingsproces is voltooid.
5) PC-registers
Het PC-register slaat het adres op van de Java Instructie van de virtuele machine die momenteel wordt uitgevoerd. JavaElke thread heeft zijn eigen, aparte pc-register.
6) Native methodestapels
Native method stacks bevatten de instructies van native code die afhankelijk zijn van de native bibliotheek. Deze zijn geschreven in een andere taal dan de native code. Java.
7) Uitvoeringsmotor
De uitvoeringsengine leest de bytecode en voert deze stukje voor stukje uit. Het gebruikt een interpreter en een Just-In-Time (JIT) compiler om de bytecode om te zetten in native machinecode en deze uit te voeren.
8) Native Method Interface
De Native Method Interface is een programmeerframework. Het staat het toe Java Code die in een JVM draait om native applicaties en bibliotheken aan te roepen en door hen aangeroepen te worden.
9) Native methodebibliotheken
Native Libraries is een verzameling van de native bibliotheken (C, C++) die nodig zijn voor de uitvoeringsengine.
Software Code Compilatie- en uitvoeringsproces
Om een โโsoftwareprogramma te schrijven en uit te voeren, heb je het volgende nodig:
- 1) Redacteur โ Om je programma in te typen; hiervoor kun je Kladblok gebruiken.
- 2) Compiler โ Om uw programma in een hogere programmeertaal om te zetten naar native machinecode.
- 3) Linker โ Om de verschillende verwijzingen naar programmabestanden in uw hoofdprogramma te combineren.
- 4) Lader โ Om bestanden van uw secundaire opslagmedium, zoals een harde schijf, USB-stick of cd, in het RAM-geheugen te laden voor uitvoering. Het laden gebeurt automatisch wanneer u uw code uitvoert.
- 5) Uitvoering โ De daadwerkelijke uitvoering van de code, die wordt afgehandeld door uw besturingssysteem en processor.
Met deze achtergrond kun je de volgende video bekijken om meer te leren over de interne werking en architectuur van de JVM (Java virtuele machine).
Klik hier als de video niet toegankelijk is
Compilatie- en uitvoeringsproces van C-code
Om het te begrijpen Java Laten we, om het compilatieproces te begrijpen, eerst eens kort kijken naar het compilatie- en linkproces in C.
Stel dat je in de hoofdfunctie twee functies hebt aangeroepen, f1 en f2. De hoofdfunctie is opgeslagen in het bestand a1.c.
Functie f1 is opgeslagen in het bestand a2.c.
Functie f2 is opgeslagen in het bestand a3.c.
Al deze bestanden, namelijk a1.c, a2.c en a3.c, worden aan de compiler aangeboden, die vervolgens de bijbehorende objectbestanden uitvoert, oftewel de machinecode.
De volgende stap is het samenvoegen van al deze objectbestanden tot รฉรฉn enkel .exe-bestand met behulp van een linker. De linker zal al deze bestanden combineren en het .exe-bestand produceren.
Tijdens de uitvoering van het programma zal een opstartprogramma het bestand a.exe in de computer laden. RAM voor uitvoering.
Java code compileren en uitvoeren in Java VM
Laten we nu eens kijken naar het proces voor JavaIn je hoofdprogramma heb je twee methoden, f1 en f2.
- De hoofdmethode is opgeslagen in het bestand a1.java.
- f1 wordt opgeslagen in een bestand als a2.java
- f2 wordt opgeslagen in een bestand als a3.java
De compiler compileert de drie bestanden en produceert drie bijbehorende .class-bestanden, die bestaan โโuit bytecode. In tegenstelling tot C wordt er geen koppeling gemaakt.
De Java VM, goud Java De virtuele machine bevindt zich in het RAM-geheugen. Tijdens de uitvoering worden de klassebestanden, met behulp van de class loader, in het RAM-geheugen geladen. De bytecode wordt gecontroleerd op eventuele beveiligingslekken.
Vervolgens zet de uitvoeringsengine de bytecode om in native machinecode. Dit is just-in-time compilatie. Het is een van de belangrijkste redenen waarom Java is relatief langzaam.
NOTITIE: JIT, ofwel de Just-in-time compiler, is het onderdeel van de Java Virtuele machine (JVM). Deze interpreteert delen van de bytecode die tegelijkertijd een vergelijkbare functionaliteit hebben.
Waarom is Java zowel geรฏnterpreteerde als gecompileerde taal?
Programmeertalen worden als volgt geclassificeerd:
- Taal op een hoger niveau, bijvoorbeeld: C++, Java
- Middelniveau talen, bijvoorbeeld C
- Laag-niveau taal, bijvoorbeeld: Assembly
- Ten slotte, het laagste niveau, is de machinetaal.
A compiler Een programma is een programma dat een programma van het ene programmeertaalniveau naar het andere omzet. Bijvoorbeeld, de conversie van een C++ Het programma wordt omgezet in machinecode. Java De compiler zet hoogwaardige code om. Java code omzetten naar bytecode (wat ook een soort machinecode is).
An tolk is een programma dat een programma op een bepaald niveau omzet naar een andere programmeertaal. hetzelfde niveauBijvoorbeeld de omzetting van een Java programma in C++.
In JavaDe Just-In-Time codegenerator zet de bytecode om in native machinecode, die zich op hetzelfde programmeerniveau bevindt. Vandaar dat... Java is zowel een gecompileerde als een geรฏnterpreteerde taal.
Waarom is Java langzaam?
De twee belangrijkste redenen achter de traagheid van Java zijn:
- Dynamisch koppelen: In tegenstelling tot C wordt het koppelen tijdens runtime uitgevoerd, elke keer dat het programma wordt uitgevoerd Java.
- Runtime-tolk: De conversie van bytecode naar native machinecode gebeurt tijdens runtime Javawaardoor de snelheid nog verder afneemt.
De nieuwste versies van Java hebben deze prestatieknelpunten grotendeels aangepakt.











