Vad är JRE? Introduktion till Java Runtime Environment

Tillsammans bildar Java Development Kit (JDK), Java Virtual Machine (JVM) och Java Runtime Environment (JRE) en kraftfull trifecta av Java-plattformskomponenter för utveckling och körning av Java-applikationer. Jag har tidigare introducerat JDK och JVM. I den här snabbhandboken lär du dig om JRE, som är runtime-miljön för Java.

Praktiskt taget är en runtime-miljö en mjukvara som är utformad för att köra annan programvara. Som körmiljö för Java innehåller JRE Java-klassbiblioteken, Java-klassladdaren och Java Virtual Machine. I detta system:

  • Den klass loader är ansvarig för att fylla på klasser och ansluta dem med kärnbibliotek Java klass.
  • Den JVM ansvarar för att Java-program har de resurser de behöver för att köra och prestera bra i enheten eller molnmiljö.
  • Den JRE är främst en behållare för de andra komponenter, och ansvarar för iscensätta sin verksamhet.

Vi kommer att gräva mycket djupare in i hur dessa komponenter fungerar tillsammans i följande avsnitt.

Installera JDK, JRE och JVM

Från ett installationsperspektiv, närhelst du laddar ner en JDK, kommer den att innehålla en versionskompatibel JRE och att JRE kommer att inkludera en standard-JVM. Du kan också ladda ner JRE separat från JDK, och du kan välja mellan en mängd olika JVM. Standardvärden fungerar bra för de flesta implementeringar, särskilt när du börjar med Java.

Vad är en runtime-miljö?

Ett program måste köras och för att göra det behöver det en miljö att köra i. Runtime-miljön laddar klassfiler och säkerställer att det finns tillgång till minne och andra systemresurser för att köra dem. Tidigare använde de flesta programvaror operativsystemet (OS) som sin runtime-miljö. Programmet sprang inuti vilken dator som helst, men förlitar sig på operativsysteminställningar för resursåtkomst. Resurser i detta fall skulle vara saker som minne och programfiler och beroenden. Java Runtime Environment förändrade allt detta, åtminstone för Java-program.

WORA för Java

När det först introducerades ansågs Java: s "skriv en gång, kör var som helst" -principen revolutionerande, men idag har den antagits som en norm för de flesta programvarusystem.

Java Runtime-miljön

Vi kan se på programvara som en serie lager som sitter ovanpå systemhårdvaran. Varje lager tillhandahåller tjänster som kommer att användas (och krävs) av lagren ovanför det. Java Runtime Environment är ett mjukvarulager som körs ovanpå datorns operativsystem och ger ytterligare tjänster specifika för Java.

JRE jämnar ut mångfalden av operativsystem, vilket säkerställer att Java-program kan köras på praktiskt taget alla operativsystem utan modifiering. Det tillhandahåller också mervärdestjänster. Automatisk minneshantering är en av JRE: s viktigaste tjänster, vilket säkerställer att programmerare inte behöver manuellt styra allokering och omfördelning av minne.

Kort sagt är JRE ett slags meta-OS för Java-program. Det är ett klassiskt exempel på abstraktion , som abstraherar det underliggande operativsystemet till en konsekvent plattform för att köra Java-applikationer.

Hur JRE fungerar med JVM

En Java Virtual Machine är ett löpande mjukvarusystem som ansvarar för att köra live-Java-program. JRE är on-disk-systemet som tar din Java-kod, kombinerar den med nödvändiga bibliotek och startar JVM för att köra den.

JRE innehåller bibliotek och programvara som dina Java-program behöver köras. Som ett exempel är Java-klasslastaren en del av Java Runtime Environment. Denna viktiga programvara laddar kompilerad Java-kod i minnet och ansluter koden till lämpliga Java-klassbibliotek.

I den skiktade vyn jag just beskrivit skapas JVM av JRE. Ur ett paketperspektiv innehåller JRE JVM, som figur 1 visar.

Matthew Tyson

Installera och använda JRE

Även om det finns en konceptuell sida till JRE, är det i praktiken bara programvara installerad på en dator vars syfte är att köra dina Java-program. Som utvecklare kommer du mestadels att arbeta med JDK och JVM, eftersom det är de plattformskomponenter du använder för att utveckla och köra dina Java-program. Som Java-applikationsanvändare skulle du vara mer involverad i JRE, som låter dig köra dessa program.

I de flesta fall kommer din dator med Java installerat och JRE kommer att ingå i det. Om du någonsin behöver installera eller uppgradera manuellt kan du ladda ner den aktuella JRE-versionen från Oracle.

JRE-versioner

Java Runtime-miljön uppdateras för varje ny version av Java, och dess versionsnummer stämmer överens med Java-plattformens versioneringssystem, så till exempel kör JRE 1.8 Java 8. Medan du har en mängd olika JDK-paket att välja mellan (till exempel Enterprise Edition eller Standard Edition) som inte är fallet med JRE. De flesta datorer kör en JRE utvecklad för Java SE, som kan köra alla Java-applikationer oavsett hur den utvecklades. De flesta mobila enheter levereras med en JRE för Java ME, som är förinstallerad på den mobila enheten och inte är tillgänglig för nedladdning.

När JRE har installerats kan du interagera med det på kommandoraden genom att ange  java -version, vilket berättar vilken version som är installerad. På POSIX-system kan du alltid kontrollera den installerade platsen med which java.

JRE i devops

JRE är inte särskilt märkbar i utvecklingsstadiet, där det oftast bara kör dina program i OS eller IDE efter eget val. JRE spelar en något mer framträdande roll i devops och systemadministration eftersom den används för övervakning och konfiguration.

I grund och botten tillhandahåller JRE de "knoppar" som du skulle använda för att konfigurera och kontrollera egenskaperna hos ett Java-program. Minnesanvändning är ett bra exempel, systemadministrationens bröd och smör. Medan minnesanvändning alltid är viktig är det viktigt i molnkonfigurationer och devops är en molnbaserad teknik. Om du arbetar i en devops-miljö eller är intresserad av att förgrena dig till devops är det en bra idé att förstå hur Java-minne fungerar och hur det övervakas i JRE.

Devops eller sysadmin?

Devops är en ny term, men den beskriver något som har varit sant i årtionden, vilket är interoperabiliteten mellan utveckling och drift. I denna mening är devops bara en nyare term för vad som tidigare kallades operationer eller systemadministration. Precis som sysadmin är en viktig aspekt av devops att administrera de system som är nödvändiga för att köra programvara. Hantering av JRE är en del av hanteringen av system som kör Java-applikationer.

Java-minne och JRE

Java-minne består av tre komponenter: heap, stack och metaspace (som tidigare kallades permgen).

  • Metaspace är där Java behåller programmets oförändrade information som klassdefinitioner.
  • Heap space är där Java behåller variabelt innehåll.
  • Stack utrymme är där Java lagrar funktionskörning och variabla referenser.

Minneshantering i Java 8

Fram till Java 8 var metaspace känt som permgen. Förutom att det är ett mycket coolare namn är metaspace en betydande förändring av hur utvecklare interagerar med Javas minne. Tidigare skulle du använda kommandot för java -XX:MaxPermSizeatt övervaka storleken på permgenutrymmet. Från och med Java 8 ökar Java automatiskt storleken på metaspace för att tillgodose ditt programs metabehov. Java 8 introducerade också en ny flagga, MaxMetaspaceSizesom kan användas för att begränsa metaspace-storleken.

De andra minnesalternativen, heap och stack, förblir desamma i Java 8.

Konfigurera högutrymme

Heap space är den mest dynamiska delen av Java-minnessystemet. Du kan använda -Xmsoch -Xmxflaggor för att berätta Java hur stor att starta högen, och hur stor för att kunna bli. Att förstå hur man kan ställa in dessa flaggor för specifika programbehov är en viktig aspekt av minneshantering i Java. Idealet är att göra högen tillräckligt stor för att uppnå den mest effektiva sopuppsamlingen. Det vill säga, du vill tillåta tillräckligt med minne för att låta programmet köras, men du vill inte att det ska vara större än nödvändigt.

Konfigurera stapelutrymme

Stack-utrymme är där funktionssamtal och variabla referenser köas. Stapelutrymme är källan till det näst mest ökända felet i Java-programmering: undantaget stacköverflöde (det första är nullpekareundantaget). Det undantag spill visar att du har slut på stackutrymme eftersom för mycket av det har reserverats. Vanligtvis får du ett stacköverflöde när en metod eller metoder kallar varandra på ett cirkulärt sätt och därigenom ägnar ett ständigt växande antal funktionssamtal till stacken.

Du använder -Xssomkopplaren för att konfigurera stapelns startstorlek. Stapeln växer sedan dynamiskt enligt programmets behov.

Java-applikationsövervakning

Även om applikationsövervakning är en funktion av JVM, tillhandahåller JRE konfigurationsalternativ, som är den nödvändiga baslinjen för övervakning. En mängd olika verktyg finns tillgängliga för övervakning av Java-applikationer, från klassiker (som Unix-kommandot top) till sofistikerade fjärrövervakningslösningar som Oracles infrastrukturövervakning.

Mellan dessa alternativ finns visuella profiler som VisualVM som gör det möjligt att inspektera en pågående JVM. Dessa verktyg möjliggör spårning av hotspots och minnesläckor, samt övervakning av den totala minnesförbrukningen i ditt system.

Slutsats

Java Runtime Environment är det hårddiskprogram som laddar Java-applikationer för JVM att köra. En JRE ingår som standard när du laddar ner Java Development Kit, och varje JRE innehåller kärnbiblioteken i Java-klass, en Java-klassladdare och en Java Virtual Machine. Det är bra att förstå hur JVM, JDK och JRE interagerar, särskilt för att arbeta i moln och devops-miljöer. I dessa miljöer tar JRE en starkare roll i övervakning och konfiguration än vad den skulle göra i traditionell Java-applikationsutveckling.

Denna berättelse, "What is the JRE? Introduction to the Java Runtime Environment" publicerades ursprungligen av JavaWorld.