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.

  • ๐Ÿงฉ Bytecode-brug: De Java De compiler produceert bytecode in plaats van machinecode, en de JVM interpreteert die bytecode op elk hostsysteem.
  • ???? ๏ธ Kern Archistructuur: De JVM combineert een ClassLoader, een method area, een heap, stacks, programmatellerregisters en een uitvoeringsengine om programma's uit te voeren.
  • ๐Ÿ”„ Compilatieproces: In tegenstelling tot C, Java Vereist geen koppeling; klassebestanden worden in het RAM-geheugen geladen, geverifieerd en vervolgens tijdens de uitvoering uitgevoerd.
  • โšก JIT-compiler: De Just-In-Time-compiler zet bytecode tijdens de uitvoering om in native machinecode om de prestaties te verbeteren.
  • ???? Prestatieopmerking: Dynamische koppeling en runtime-interpretatie maken het van oudsher mogelijk om... Java langzamer, hoewel moderne versies dat verschil grotendeels hebben gedicht.

JVM Architectuur

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 JVM-virtuele machine

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.

JVM Architectuur

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.

C-code hoofdfunctie a1.c

Functie f1 is opgeslagen in het bestand a2.c.

C-codefunctie f1 a2.c

Functie f2 is opgeslagen in het bestand a3.c.

C-codefunctie f2 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 C-codecompiler produceert objectbestanden.

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.

C-codelinker produceert uitvoerbaar bestand

Tijdens de uitvoering van het programma zal een opstartprogramma het bestand a.exe in de computer laden. RAM voor uitvoering.

C-codelader laadt het uitvoerbare bestand in het RAM-geheugen.

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

Java De code compileert drie bestanden naar klassebestanden.

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.

Java De class loader laadt de klassebestanden in het RAM-geheugen.

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.

Java De uitvoeringsengine zet bytecode om in native code.

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:

  1. Dynamisch koppelen: In tegenstelling tot C wordt het koppelen tijdens runtime uitgevoerd, elke keer dat het programma wordt uitgevoerd Java.
  2. 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.

Veelgestelde vragen

De JVM voert AI- en big-data-frameworks uit zoals Deeplearning4j, Weka en Apache. SparkDankzij de Just-In-Time compiler en het geheugenbeheer kunnen deze bibliotheken grote datasets efficiรซnt verwerken op verschillende platformen, zonder dat de native code herschreven hoeft te worden.

Ja. AI-ondersteunde profilers kunnen garbage collection-logs analyseren, heapgroottes voorstellen en trage methoden signaleren. Ze helpen bij het optimaliseren van JVM-vlaggen en het sneller opsporen van knelpunten, hoewel een ontwikkelaar elke aanbevolen wijziging nog steeds moet controleren.

De JVM voert bytecode uit. De JRE bundelt de JVM met de kernbibliotheken die nodig zijn om de code uit te voeren. Java programma's. De JDK voegt ontwikkeltools toe zoals de compiler en debugger, waardoor deze gebruikt kan worden om applicaties te bouwen.

Bytecode is platformonafhankelijk, maar de JVM zelf is platformafhankelijk. Elk besturingssysteem heeft zijn eigen JVM-implementatie nodig. Dankzij dit ontwerp kan dezelfde gecompileerde bytecode overal worden uitgevoerd waar een compatibele JVM is geรฏnstalleerd.

Vat dit bericht samen met: