Hva er JVM? Forklar JVM Architecture

โšก Smart oppsummering

Java Virtuell maskin (JVM) er motoren som gir et kjรธretidsmiljรธ for รฅ drive Java kode, som konverterer plattformuavhengig bytekode til maskinsprรฅk. Det er en del av Java Kjรธretidsmiljรธ og muliggjรธr Java's skrivbare รฉn gang, kjรธrbare hvor som helst.

  • ๐Ÿงฉ Bytekodebro: Ocuco Java Kompilatoren produserer bytekode i stedet for maskinkode, og JVM-en tolker den bytekoden pรฅ ethvert vertssystem.
  • ๐Ÿ—๏ธ Kjerne Archilรฆre: JVM kombinerer en ClassLoader, et metodeomrรฅde, en heap, stabler, PC-registre og en utfรธrelsesmotor for รฅ kjรธre programmer.
  • ๐Ÿ”„ Kompileringsflyt: I motsetning til C, Java krever ingen kobling; klassefiler lastes inn i RAM, verifiseres og deretter kjรธres under kjรธretid.
  • โšก JIT-kompilator: Just-In-Time-kompilatoren konverterer bytekode til innebygd maskinkode under kjรธring for รฅ forbedre ytelsen.
  • ???? Ytelsesmerknad: Dynamisk lenking og runtime-tolkning gjรธr historisk sett Java tregere, selv om moderne versjoner i stor grad tetter dette gapet.

JVM Architecture

Hva er JVM i Java?

Java Virtuell maskin (JVM) er en motor som gir et driftsmiljรธ for รฅ drive Java kode eller applikasjoner. Den konverterer Java bytekode til maskinsprรฅk. JVM er en del av Java Runtime Environment (JRE). I andre programmeringssprรฅk produserer kompilatoren maskinkode for et bestemt system. Imidlertid Java kompilatoren produserer kode for en virtuell maskin kjent som Java Virtuell maskin.

Hvordan fungerer JVM?

Fรธrst Java Koden kompileres til bytekode. Denne bytekoden tolkes pรฅ forskjellige maskiner. Mellom vertssystemet og Java kildekode, bytekode er et mellomliggende sprรฅk. JVM i Java er ansvarlig for รฅ tildele minneplass.

Arbeider av Java Virtuell maskin JVM

Arbeider av Java Virtuell maskin (JVM)

Architecture av JVM (Java virtuell maskin)

La oss nรฅ forstรฅ arkitekturen til JVM. JVM-arkitektur i Java inneholder en klasselaster, et minneomrรฅde, en utfรธrelsesmotor og mer.

JVM Architecture

Java Virtuell maskin Architecture

1) ClassLoader
Klasselasteren er et delsystem som brukes til รฅ laste inn klassefiler. Den utfรธrer tre hovedfunksjoner, nemlig lasting, kobling og initialisering.

2) Metodeomrรฅde
JVM-metodeomrรฅdet lagrer klassestrukturer som metadata, den konstante runtime-poolen og koden for metoder.

3) Haug
Alle Objekter, deres relaterte forekomstvariabler og matriser lagres i heapen. Dette minnet er felles og deles pรฅ tvers av flere trรฅder.

4) JVM-sprรฅkstabler
Java Sprรฅkstabler lagrer lokale variabler og deres delvise resultater. Hver trรฅd har sin egen JVM-stabel, som opprettes samtidig som trรฅden opprettes. En ny ramme opprettes hver gang en metode kalles, og den slettes nรฅr metodekallingsprosessen er fullfรธrt.

5) PC-registre
PC-registeret lagrer adressen til Java virtuell maskininstruksjon som kjรธrer for รธyeblikket. I Java, hver trรฅd har sitt eget separate PC-register.

6) Native metodestabler
Stabler med native metoder inneholder instruksjonene fra native koder som er avhengige av det native biblioteket. De er skrevet pรฅ et annet sprรฅk i stedet for Java.

7) Utfรธrelsesmotor
Utfรธrelsesmotoren leser bytekoden og utfรธrer den bit for bit. Den bruker en tolk og en Just-In-Time (JIT)-kompilator for รฅ konvertere bytekode til innebygd maskinkode og kjรธre den.

8) Grensesnitt for opprinnelig metode
Native Method Interface er et programmeringsrammeverk. Det tillater Java kode som kjรธrer i en JVM for รฅ kalle, og bli kalt av, native applikasjoner og biblioteker.

9) Native metodebiblioteker
Native Libraries er en samling av de native bibliotekene (C, C++) som trengs av utfรธrelsesmotoren.

Software Code Kompilerings- og utfรธrelsesprosess

For รฅ skrive og kjรธre et program trenger du fรธlgende:

  • 1) Redaktรธr โ€“ For รฅ skrive programmet ditt inn i; en notisblokk kan brukes til dette.
  • 2) kompilatoren โ€“ For รฅ konvertere ditt hรธynivรฅsprรฅkprogram til innebygd maskinkode.
  • 3) Linker โ€“ For รฅ kombinere de ulike programfilreferansene i hovedprogrammet ditt.
  • 4) Laster โ€“ For รฅ laste inn filer fra din sekundรฆre lagringsenhet, som en harddisk, flash-stasjon eller CD, til RAM for kjรธring. Lastingen skjer automatisk nรฅr du kjรธrer koden din.
  • 5) Utfรธrelse โ€“ Faktisk utfรธrelse av koden, som hรฅndteres av operativsystemet og prosessoren din.

Med denne bakgrunnen, se fรธlgende video og lรฆr den interne JVM-funksjonen og arkitekturen til JVM (Java virtuell maskin).

Klikk her. hvis videoen ikke er tilgjengelig

C-kode kompilering og utfรธrelsesprosess

For รฅ forstรฅ Java kompileringsprosessen, la oss fรธrst ta en rask titt pรฅ kompilerings- og koblingsprosessen i C.

Anta at du i hovedfunksjonen har kalt to funksjoner, f1 og f2. Hovedfunksjonen er lagret i filen a1.c.

C-kode hovedfunksjon a1.c

Funksjonen f1 er lagret i en fil a2.c.

C-kodefunksjon f1 a2.c

Funksjonen f2 er lagret i en fil a3.c.

C-kodefunksjon f2 a3.c

Alle disse filene, dvs. a1.c, a2.c og a3.c, mates til kompilatoren, hvis utdata er de tilsvarende objektfilene, som er maskinkoden.

C-kodekompilator produserer objektfiler

Neste steg er รฅ integrere alle disse objektfilene til รฉn enkelt .exe-fil ved hjelp av en linker. Linkeren vil slรฅ sammen alle disse filene og produsere .exe-filen.

C-kodelenker produserer exe-fil

Under programkjรธringen vil et lasteprogram laste inn en .exe-fil. RAM for henrettelse.

C-kodelaster laster inn exe i RAM

Java kode kompilering og utfรธrelse i Java VM

La oss nรฅ se pรฅ prosessen for JavaI hovedsak har du to metoder, f1 og f2.

  • Hovedmetoden er lagret i filen a1.java
  • f1 er lagret i en fil som a2.java
  • f2 er lagret i en fil som a3.java

Java kode kompilerer tre filer til klassefiler

Kompilatoren vil kompilere de tre filene og produsere tre tilsvarende .class-filer, som bestรฅr av BYTE-kode. I motsetning til C, gjรธres ingen lenking.

Ocuco Java VM, gull Java Virtuell maskin, ligger pรฅ RAM-minnet. Under kjรธring, ved hjelp av klasselasteren, blir klassefilene hentet inn i RAM-minnet. BYTE-koden verifiseres for eventuelle sikkerhetsbrudd.

Java klasselaster henter klassefiler inn i RAM

Deretter vil utfรธrelsesmotoren konvertere bytekoden til innebygd maskinkode. Dette er just-in-time-kompilering. Det er en av hovedgrunnene til at Java er forholdsvis treg.

Java utfรธrelsesmotoren konverterer bytekode til native kode

NOTAT: JIT, eller Just-in-time-kompilatoren, er en del av Java Virtuell maskin (JVM). Den tolker deler av bytekoden som har lignende funksjonalitet samtidig.

Hvorfor er Java bรฅde tolket og kompilert sprรฅk?

Programmerings sprรฅk er klassifisert som:

  • Hรธyere nivรฅ sprรฅk, f.eks. C++, Java
  • Mellomnivรฅsprรฅk, f.eks. C
  • Lavnivรฅsprรฅk, f.eks. Assembly
  • Til slutt, det laveste nivรฅet som maskinsprรฅk

A kompilatoren er et program som konverterer et program fra ett sprรฅknivรฅ til et annet. For eksempel konverteringen av et C++ program inn i maskinkode. Det Java kompilatoren konverterer hรธynivรฅ Java kode til bytekode (som ogsรฅ er en type maskinkode).

An tolk er et program som konverterer et program pรฅ ett nivรฅ til et annet programmeringssprรฅk pรฅ samme nivรฅFor eksempel konverteringen av en Java program inn C++.

In Java, konverterer Just-In-Time-kodegeneratoren bytekoden til den opprinnelige maskinkoden, som er pรฅ samme programmeringsnivรฅer. Derfor, Java er bรฅde et kompilert og et tolket sprรฅk.

Hvorfor er Java langsom?

De to hovedรฅrsakene bak tregheten til Java er:

  1. Dynamisk kobling: I motsetning til C, gjรธres koblingen ved kjรธretid, hver gang programmet kjรธres inn Java.
  2. Kjรธretidstolk: Konverteringen av bytekode til innebygd maskinkode gjรธres ved kjรธretid Java, noe som reduserer hastigheten ytterligere.

Imidlertid er de nyeste versjonene av Java har i stor grad adressert disse ytelsesflaskehalsene.

Spรธrsmรฅl og svar

JVM-en kjรธrer AI- og stordata-rammeverk som Deeplearning4j, Weka og Apache SparkJust-In-Time-kompilatoren og minnehรฅndteringen lar disse bibliotekene behandle store datasett effektivt pรฅ tvers av plattformer uten รฅ omskrive den opprinnelige koden.

Ja. AI-assisterte profileringsprogrammer kan analysere sรธppelinnsamlingslogger, foreslรฅ heap-stรธrrelser og flagge trege metoder. De hjelper med รฅ finjustere JVM-flagg og oppdage flaskehalser raskere, men en utvikler bรธr fortsatt validere alle anbefalte endringer.

JVM kjรธrer bytekode. JRE pakker JVM med kjernebiblioteker som trengs for รฅ kjรธre Java programmer. JDK legger til utviklingsverktรธy som kompilatoren og feilsรธkingsprogrammet, slik at det brukes til รฅ bygge applikasjoner.

Bytekode er plattformuavhengig, men selve JVM-en er plattformavhengig. Hvert operativsystem trenger sin egen JVM-implementering. Denne designen lar den samme kompilerte bytekoden kjรธre hvor som helst en kompatibel JVM er installert.

Oppsummer dette innlegget med: