Java >> Java opplæring >  >> JVM

Java JDK, JRE og JVM

Lær forskjellene mellom JDK, JRE og JVM . Hvordan fungerer JVM inne? Hva er klasselastere , tolk og JIT-kompilatorer . Sjekk også noen Java-intervjuspørsmål.

Table of Contents

1. Execution of a Java Program
2. What is JVM?
3. What is JRE?
4. What is JDK?
5. Differences between JDK, JRE and JVM
6. Interview questions related to JDK, JRE and JVM
7. JDK and JRE downloads

1. Kjøring av et Java-program

Før du hopper inn i Javas indre, la oss forstå hvordan en Java-kildefil kjøres.

  1. Vi skriver Java-kildekoden i Simple.Java fil ved hjelp av en editor eller IDE (integrert utviklingsmiljø ) f.eks. Eclipse eller IntelliJ Idea .
  2. Programmet må kompileres til bytekode. Java-kompilator (javac ) kompilerer kildekoden til Simple.class fil.
  3. Denne klassefilen kan kjøres på hvilken som helst plattform/OS av JVM (virtuell Java-maskin ).
  4. JVM oversetter bytekode til innebygd maskinkode som maskiner kan kjøre.

2. Hva er JVM?

Virtuell Java-maskin (JVM) er den virtuelle maskinen som kjører Java-bytekodene. Du får denne bytekoden ved å kompilere .java filer til .class filer. .class filer inneholder bytekodene forstått av JVM.

I den virkelige verden er JVM en spesifikasjon som gir et kjøretidsmiljø der Java-bytekode kan kjøres. Ulike leverandører tilbyr forskjellige implementeringer av denne spesifikasjonen. For eksempel viser denne wiki-siden forskjellige JVM-implementeringer.

Den mest populære implementeringen av JVM er Hotspot som eies og leveres av Oracle Corporation. (Tidligere av Sun Microsystems, Inc. ).

JVM leverer optimal ytelse for Java-applikasjoner ved bruk av mange avanserte teknikker, inkludert en toppmoderne minnemodell, søppelsamler , og adaptiv optimalisering .

JVM kommer i to forskjellige smaker – klient og server . Selv om server- og klient-VM-ene er like, er Server-VM-en spesialinnstilt for å maksimere maksimal driftshastighet. Den er ment for å kjøre langvarige serverapplikasjoner, som trenger raskest mulig driftshastighet mer enn en rask oppstartstid eller mindre kjøretidsminneavtrykk. Utviklere kan velge hvilket system de vil ha ved å spesifisere -client eller -server .

JVM kalles virtuell fordi det gir et maskingrensesnitt som ikke er avhengig av det underliggende operativsystemet og maskinvarearkitekturen. Denne uavhengigheten fra maskinvare og operativsystem er en hjørnestein i Java-programmers skriv-en gang-kjør-hvor som helst verdi.

2.1. JVM-arkitektur

2.1.1. Klasselaster

Klasselasteren er et undersystem som brukes til å laste klassefiler. Den utfører tre primære funksjoner, dvs. klasselasting, kobling og initialisering.

  1. Laster inn
    • For å laste klasser har JVM 3 typer klasselastere. Bootstrap , utvidelse og applikasjon klasselaster.
    • Når du laster en klassefil, finner JVM ut en avhengighet for en eller annen vilkårlig klasse XYZ.class .
    • Første bootstrap-klasselaster prøver å finne klassen. Den skanner rt.jar fil i JRE lib mappe.
    • Hvis klassen ikke blir funnet, søker utvidelsesklasselasteren i klassefilen i jre\lib\ext mappe.
    • Igjen hvis klassen ikke blir funnet, søker applikasjonsklasselasteren i alle Jar-filene og -klassene i CLASSPATH miljøvariabel for systemet.
    • Hvis klassen blir funnet av en hvilken som helst laster, blir klassen lastet av klasselaster; annet ClassNotFoundException blir kastet.
  2. Kobling

    Etter at klassen er lastet inn av klasselasteren, utføres kobling. En bytekodebekreftelse vil bekrefte om den genererte bytekoden er riktig eller ikke. Hvis verifiseringen mislykkes, får vi en bekreftelsesfeil. Den utfører også minnetildelingen til statiske variabler og metoder som finnes i klassen.

  3. Initialisering

    Dette er den siste fasen av klasselasting, her vil alle statiske variabler bli tildelt de opprinnelige verdiene, og de statiske blokkene vil bli utført.

2.1.2. JVM-minneområder

Minneområdet inne i JVM er delt inn i flere deler for å lagre spesifikke applikasjonsdata.

  • Metode er a lagrer klassestrukturer som metadata, den konstante kjøretidspoolen og koden for metoder.
  • Haap lagrer alle objekter som opprettes under applikasjonskjøring.
  • Stabler lagre lokale variabler og mellomresultater. Alle slike variabler er lokale for tråden de er opprettet av. Hver tråd har sin egen JVM-stabel, opprettet samtidig som tråden opprettes. Så alle slike lokale variabler kalles tråd-lokale variabler .
  • PC-register lagre den fysiske minneadressen til setningene som kjøres for øyeblikket. I Java har hver tråd sitt eget PC-register.
  • Java støtter og bruker native kode også. Mange lavnivåkoder er skrevet på språk som C og C++. Innebygde metodestabler inneholder instruksjonene til opprinnelig kode.

2.2. JVM Execution Engine

All kode som er tildelt JVM, kjøres av en utførelsesmotor . Utførelsesmotoren leser bytekoden og kjører én etter én. Den bruker to innebygde tolke og JIT-kompilator for å konvertere bytekoden til maskinkode og kjøre den .

Med JVM produserer både tolk og kompilator naturlig kode. Forskjellen er hvordan de genererer den opprinnelige koden, hvor optimalisert den er, samt hvor kostbar optimaliseringen er.

2.2.1. Tolk

En JVM-tolk konverterer stort sett hver bytekode-instruksjon til tilsvarende opprinnelig instruksjon ved å slå opp en forhåndsdefinert JVM-instruksjon til maskininstruksjonskartlegging. Det direkte kjører bytekoden og utfører ingen optimalisering.

2.2.2. JIT-kompilator

For å forbedre ytelsen , JIT-kompilatorer samhandler med JVM under kjøring og kompilerer passende bytekodesekvenser til innebygd maskinkode. Vanligvis tar JIT-kompilatoren en kodeblokk (ikke én setning om gangen som tolk), optimerer koden og oversetter den deretter til optimalisert maskinkode.

JIT-kompilatoren er aktivert som standard . Du kan deaktivere JIT-kompilatoren, i så fall vil hele Java-programmet bli tolket. Det anbefales ikke å deaktivere JIT-kompilatoren bortsett fra for å diagnostisere eller omgå JIT-kompileringsproblemer.

3. Hva er JRE?

Java Runtime Environment (JRE) er en programvarepakke som samler bibliotekene (krukkene) og Java Virtual Machine, og andre komponenter for å kjøre applikasjoner skrevet i Java. JVM er bare en del av JRE-distribusjoner.

For å kjøre et hvilket som helst Java-program, må du ha JRE installert på maskinen. Det er minimumskravet for å kjøre Java-applikasjoner på hvilken som helst datamaskin.

JRE pakker følgende komponenter –

  1. DLL filer som brukes av Java HotSpot Client Virtual Machine .
  2. DLL-filer som brukes av Java HotSpot Server Virtual Machine .
  3. Kodebiblioteker , egenskapsinnstillinger , og ressursfiler brukt av Java runtime-miljøet. f.eks. rt.jar og charsets.jar .
  4. Java utvidelsesfiler for eksempel localedata.jar .
  5. Inneholder filer som brukes til sikkerhetsadministrasjon. Disse inkluderer sikkerhetspolicyen (java.policy) og sikkerhetsegenskaper (java.security) filer.
  6. Jar-filer som inneholder støtteklasser for appleter .
  7. Inneholder TrueType-fontfiler for bruk av plattformen.

JRE-er kan lastes ned som en del av JDK-er, eller du kan laste dem ned separat. JRE-er er plattformavhengige. Det betyr at basert på typen maskin (OS og arkitektur), må du velge JRE-pakken som skal importeres og installeres.

Du kan for eksempel ikke installere en 64-bit JRE-distribusjon på 32-bit maskin. Tilsvarende JRE-distribusjon for Windows vil ikke fungere i Linux; og omvendt.

4. Hva er JDK?

JDK er et supersett av JRE . JDK inneholder alt som JRE har sammen med utviklingsverktøy for utvikling, feilsøking og overvåking av Java-applikasjoner. Du trenger JDK når du trenger å utvikle Java-applikasjoner .

Få viktige komponenter som leveres med JDK-er er som følger:

  • appletviewer – dette verktøyet kan brukes til å kjøre og feilsøke Java-appleter uten nettleser
  • tilpasset – verktøyet for merknadsbehandling
  • utsjekk – et verktøy som oppdager JAR-filkonflikter
  • javadoc – dokumentasjonsgeneratoren, som automatisk genererer dokumentasjon fra kildekodekommentarer
  • krukke – arkiveren, som pakker relaterte klassebiblioteker inn i en enkelt JAR-fil. Dette verktøyet hjelper også med å administrere JAR-filer
  • jarsigner – jarsignerings- og verifiseringsverktøyet
  • javap – klassefildemonteringsverktøyet
  • javaws – Java Web Start-startprogrammet for JNLP-applikasjoner
  • JConsole – Java Monitoring and Management Console
  • jhat – Java-hauganalyseverktøy
  • jrunscript – Java-kommandolinjeskriptskall
  • jstack – verktøy som skriver ut Java-stabelspor av Java-tråder
  • nøkkelverktøy – verktøy for å manipulere nøkkellageret
  • policyverktøy – verktøyet for opprettelse og styring av retningslinjer
  • xjc – En del av Java API for XML Binding (JAXB) API. Den godtar et XML-skjema og genererer Java-klasser

På samme måte som JRE-er er JDK-er også plattformavhengige. Så vær forsiktig når du laster ned JDK-pakken til maskinen din.

5. Forskjellen mellom JDK, JRE og JVM

Basert på diskusjonene ovenfor kan vi tegne en sammenheng mellom disse tre som nedenfor –

JRE =JVM + biblioteker for å kjøre Java-applikasjon.

JDK =JRE + verktøy for å utvikle Java Application.

Kort sagt, hvis du er en Java-applikasjonsutvikler som skriver kode, trenger du JDK installert på maskinen din. Men hvis du bare vil kjøre applikasjoner bygget i Java, trenger du bare JRE installert på datamaskinen din.

6. Intervjuspørsmål knyttet til JDK, JRE og JVM

Hvis du forsto hva vi har diskutert så langt i dette innlegget, vil det ikke være vanskelig å møte ethvert intervjuspørsmål. Vær likevel forberedt på å svare på spørsmål som nedenfor:

  1. Hva er JVM-arkitektur?

    Det er allerede forklart i detalj.

  2. Hvor mange typer klasselastere er det i Java?

    Det er 3 klasselastere. Bootstrap, utvidelse og applikasjonsklasselastere.

  3. Hvordan fungerer klasselasteren i Java?

    Klasselastere skanner sine forhåndsdefinerte plasseringer for jar-filer og klasser. De skanner alle klassefilene i banen og ser etter den nødvendige klassen. Hvis de blir funnet, laster de, kobler og initialiserer klassefilen.

  4. Forskjellen mellom JRE og JVM?

    JVM er spesifikasjonen for et kjøretidsmiljø som kjører Java-applikasjonene. Hotspot JVM er en slik implementering av spesifikasjonen. Den laster klassefilene og bruker tolken og JIT-kompilatoren til å konvertere bytekode til maskinkode og kjøre den.

  5. Forskjellen mellom tolk og JIT-kompilator?

    Tolkeren tolker bytekoden linje for linje og kjører den sekvensielt. Det resulterer i dårlig ytelse. JIT-kompilatoren legger til optimalisering til denne prosessen ved å analysere koden i blokker og deretter forberede mer optimalisert maskinkode.

7. JDK og JRE nedlastinger

Du finner de plattformspesifikke JDK- og JRE-programvarepakkene på Oracles Java-distribusjonssider.

Denne siden viser for eksempel alle tilgjengelige JDK-distribusjoner for Java 8.

På samme måte er JRE 8-distribusjoner tilgjengelig på denne siden.

God læring !!


Java Tag