Programmering

Hva er JRE? Introduksjon til Java Runtime Environment

Sammen danner Java Development Kit (JDK), Java Virtual Machine (JVM) og Java Runtime Environment (JRE) en kraftig trifekta av Java-plattformkomponenter for utvikling og kjøring av Java-applikasjoner. Jeg har tidligere introdusert JDK og JVM. I denne raske opplæringen lærer du om JRE, som er kjøretidsmiljøet for Java.

Praktisk sett a kjøretidsmiljø er en programvare som er designet for å kjøre annen programvare. Som kjøretidsmiljø for Java inneholder JRE Java-klassebiblioteker, Java-klasselaster og Java Virtual Machine. I dette systemet:

  • De klasselaster er ansvarlig for korrekt lasting av klasser og tilknytning til kjerne Java-klassebiblioteker.
  • De JVM er ansvarlig for å sikre at Java-applikasjoner har de ressursene de trenger for å kjøre og prestere godt i enheten eller skymiljøet ditt
  • De JRE er hovedsakelig en container for de andre komponentene, og er ansvarlig for å organisere deres aktiviteter.

Vi vil grave mye dypere inn i hvordan disse komponentene fungerer sammen i avsnittene som følger.

Installere JDK, JRE og JVM

Fra et installasjonsperspektiv, når som helst du laster ned en JDK, vil den inkludere en versjonskompatibel JRE, og at JRE vil inkludere en standard JVM. Du kan også laste ned JRE separat fra JDK, og du kan velge mellom en rekke JVM-er. Standardverdier fungerer bra for de fleste implementeringer, spesielt når du begynner med Java.

Hva er et kjøretidsmiljø?

Et program må kjøres, og for å gjøre det trenger det et miljø å kjøre i. Runtime-miljøet laster inn klassefiler og sørger for at det er tilgang til minne og andre systemressurser for å kjøre dem. Tidligere brukte de fleste programvarene operativsystemet (OS) som kjøretidsmiljø. Programmet kjørte inne i hvilken datamaskin det var på, men stolte på operativsysteminnstillinger for ressurstilgang. Ressurser i dette tilfellet vil være ting som minne- og programfiler og avhengigheter. Java Runtime Environment endret alt det, i det minste for Java-programmer.

WORA for Java

Da den først ble introdusert, ble Java's "skriv en gang, kjør hvor som helst" -prinsippet ansett som revolusjonerende, men i dag er det blitt vedtatt som en norm for de fleste programvaresystemer.

Java Runtime-miljøet

Vi kan se på programvare som en serie lag som sitter på toppen av systemets maskinvare. Hvert lag gir tjenester som vil bli brukt (og påkrevd) av lagene over det. Java Runtime Environment er et programvarelag som kjører på toppen av datamaskinens operativsystem og gir tilleggstjenester som er spesifikke for Java.

JRE glatter over mangfoldet av operativsystemer, og sørger for at Java-programmer kan kjøres på praktisk talt alle operativsystemer uten endring. Det gir også merverditjenester. Automatisk minnehåndtering er en av JREs viktigste tjenester, og sørger for at programmerere ikke trenger å manuelt kontrollere allokering og omdisponering av minne.

Kort sagt, JRE er en slags meta-OS for Java-programmer. Det er et klassisk eksempel på abstraksjon, abstraherer det underliggende operativsystemet til en konsistent plattform for kjøring av Java-applikasjoner.

Hvordan JRE fungerer med JVM

En Java Virtual Machine er et løpende programvaresystem som er ansvarlig for å utføre live Java-programmer. JRE er disksystemet som tar Java-koden din, kombinerer den med nødvendige biblioteker og starter JVM for å utføre den.

JRE inneholder biblioteker og programvare som Java-programmene dine trenger å kjøre. Som et eksempel er Java-klasselaster en del av Java Runtime Environment. Denne viktige programvaren laster inn samlet Java-kode i minnet og kobler koden til de aktuelle Java-klassebibliotekene.

I lagvisningen jeg nettopp beskrev, er JVM opprettet av JRE. Fra et pakkeperspektiv inneholder JRE JVM, som figur 1 viser.

Matthew Tyson

Installere og bruke JRE

Selv om det er en konseptuell side av JRE, er det i praksis bare programvare installert på en datamaskin, hvis formål er å kjøre Java-programmene dine. Som utvikler vil du stort sett jobbe med JDK og JVM, fordi det er plattformkomponentene du bruker til å utvikle og kjøre Java-programmene dine. Som bruker av Java-applikasjoner vil du være mer involvert i JRE, som lar deg kjøre disse programmene.

I de fleste tilfeller kommer datamaskinen din med Java installert, og JRE vil bli inkludert i det. Hvis du noen gang trenger å installere eller oppgradere manuelt, kan du laste ned den gjeldende JRE-versjonen fra Oracle.

JRE-versjoner

Java Runtime Environment er oppdatert for hver nye versjon av Java, og versjonsnumrene stemmer overens med Java-plattformens versjonssystem, så for eksempel kjører JRE 1.8 Java 8. Mens du har en rekke JDK-pakker å velge mellom (for eksempel Enterprise Edition eller Standard Edition) som ikke er tilfelle med JRE. De fleste datamaskiner kjører en JRE utviklet for Java SE, som er i stand til å kjøre alle Java-applikasjoner uavhengig av hvordan den ble utviklet. De fleste mobile enheter kommer med en JRE for Java ME, som er forhåndsinstallert på den mobile enheten og ikke er tilgjengelig for nedlasting.

Når JRE er installert, kan du samhandle med den på kommandolinjen ved å gå innjava -versjon, som vil fortelle deg hvilken versjon som er installert. På POSIX-systemer kan du alltid sjekke den installerte plasseringen med hvilken java.

JRE i devops

JRE er ikke veldig merkbar i utviklingsfasen, hvor den for det meste bare kjører programmene dine i operativsystemet eller IDE etter eget valg. JRE spiller en litt mer fremtredende rolle i devops og systemadministrasjon fordi den brukes til overvåking og konfigurasjon.

I utgangspunktet gir JRE "knottene" du vil bruke til å konfigurere og kontrollere egenskapene til et Java-program. Minnebruk er et godt eksempel, brød og smør av systemadministrasjon. Mens minnebruk alltid er viktig, er det viktig i skykonfigurasjoner, og devops er en skybasert teknologi. Hvis du jobber i et devops-miljø, eller er interessert i å forgrene deg til devops, er det en god ide å forstå hvordan Java-minne fungerer og hvordan det overvåkes i JRE.

Devops eller sysadmin?

Devops er et nytt begrep, men det beskriver noe som har vært sant i flere tiår, som er interoperabilitet mellom utvikling og drift. I denne forstand, devops er bare et nyere begrep for det som tidligere ble kalt operasjoner eller systemadministrasjon. Som sysadmin er et viktig aspekt av devops administrering av systemene som er nødvendige for å kjøre programvare. Administrering av JRE er en del av administrering av systemer som kjører Java-applikasjoner.

Java-minne og JRE

Java-minne består av tre komponenter: heap, stack og metaspace (som tidligere ble kalt permgen).

  • Metaspace er der Java holder programmets uendrede informasjon som klassedefinisjoner.
  • Haug plass er der Java holder variabelt innhold.
  • Stakk plass er der Java lagrer funksjonskjøring og variable referanser.

Minnehåndtering i Java 8

Inntil Java 8 var metaspace kjent som permgen. Foruten å være et mye kulere navn, er metaspace en betydelig endring i hvordan utviklere samhandler med Java's minne. Tidligere ville du bruke kommandoen java -XX: MaxPermSize for å overvåke størrelsen på permgenområdet. Fra Java 8 og fremover øker Java størrelsen på metaspace automatisk for å imøtekomme programmets metabehov. Java 8 introduserte også et nytt flagg, MaxMetaspaceSize, som kan brukes til å begrense metaspace-størrelsen.

De andre minnealternativene, heap and stack, forblir de samme i Java 8.

Konfigurere haugplass

Haug plass er den mest dynamiske delen av Java-minnesystemet. Du kan bruke -Xms og -Xmx flagg for å fortelle Java hvor stor du skal starte haugen, og hvor stor du kan la den bli. Å forstå hvordan du kan innstille disse flaggene for spesifikke programbehov, er et viktig aspekt av minnestyring i Java. Det ideelle er å gjøre dyngen stor nok til å oppnå den mest effektive søppeloppsamlingen. Det vil si at du vil tillate nok minne til å la programmet kjøre, men du vil ikke at det skal være noe større enn nødvendig.

Konfigurerer stabelplass

Stakk plass er der funksjonsanrop og variable referanser står i kø. Stabelplass er kilden til den nest mest beryktede feilen i Java-programmering: unntaket for stakkoverløp (det første er nullpeker-unntaket). De stack overflow unntak indikerer at du har gått tom for stabelplass fordi for mye av det har blitt reservert. Vanligvis får du en stabeloverløp når en metode eller metoder kaller hverandre på en sirkulær måte, og derved tilbringer et stadig økende antall funksjonsanrop i stakken.

Du bruker -Xss bytt for å konfigurere stabelens startstørrelse. Stakken vokser deretter dynamisk i henhold til programmets behov.

Java-applikasjonsovervåking

Selv om applikasjonsovervåking er en funksjon av JVM, gir JRE konfigurasjonsalternativer, som er den nødvendige baseline for overvåking. En rekke verktøy er tilgjengelige for overvåking av Java-applikasjoner, fra klassikerne (som Unix-kommandoen topp) til sofistikerte fjernovervåkingsløsninger som Oracles infrastrukturovervåking.

Mellom disse alternativene er det visuelle profiler som VisualVM som gjør det mulig å inspisere en kjørende JVM. Disse verktøyene gjør det mulig å spore hotspots og minnelekkasjer, samt se på det totale minneforbruket i systemet ditt.

Konklusjon

Java Runtime Environment er diskprogrammet som laster Java-applikasjoner for at JVM skal kjøres. En JRE er inkludert som standard når du laster ned Java Development Kit, og hver JRE inkluderer kjerne Java-klassebiblioteker, en Java-klasselaster og en Java Virtual Machine. Det er nyttig å forstå hvordan JVM, JDK og JRE samhandler, spesielt for å jobbe i sky- og devops-miljøer. I disse miljøene tar JRE en sterkere rolle i overvåking og konfigurasjon enn den ville gjort i tradisjonell Java-applikasjonsutvikling.

Denne historien, "What is the JRE? Introduction to the Java Runtime Environment" ble opprinnelig utgitt av JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found