Wat is de JRE? Inleiding tot de Java Runtime-omgeving

De Java Development Kit (JDK), de Java Virtual Machine (JVM) en de Java Runtime Environment (JRE) vormen samen een krachtige trifecta van Java-platformcomponenten voor het ontwikkelen en uitvoeren van Java-applicaties. Ik heb eerder de JDK en JVM geïntroduceerd. In deze korte tutorial leert u over de JRE, de runtime-omgeving voor Java.

Praktisch gesproken is een runtime-omgeving een stukje software dat is ontworpen om andere software uit te voeren. Als de runtime-omgeving voor Java bevat de JRE de Java-klassenbibliotheken, de Java-klassenlader en de Java Virtual Machine. In dit systeem:

  • De klassenlader is verantwoordelijk voor het correct laden van klassen en het verbinden ervan met de kern Java-klassenbibliotheken.
  • De JVM is ervoor verantwoordelijk dat Java-applicaties over de middelen beschikken die ze nodig hebben om goed te draaien en te presteren in uw apparaat of cloudomgeving.
  • De JRE is vooral een container voor die andere componenten, en is verantwoordelijk voor het orkestreren van hun activiteiten.

In de volgende paragrafen zullen we veel dieper ingaan op hoe deze componenten samenwerken.

De JDK, JRE en JVM

Vanuit een installatieperspectief zal elke keer dat u een JDK downloadt, deze een versie-compatibele JRE bevatten en die JRE zal een standaard JVM bevatten. U kunt de JRE ook afzonderlijk downloaden van de JDK, en u kunt kiezen uit verschillende JVM's. Standaardwaarden werken goed voor de meeste implementaties, vooral als u begint met Java.

Wat is een runtime-omgeving?

Een softwareprogramma moet worden uitgevoerd, en om dat te doen, heeft het een omgeving nodig om in te draaien. De runtime-omgeving laadt klassebestanden en zorgt ervoor dat er toegang is tot geheugen en andere systeembronnen om ze uit te voeren. In het verleden gebruikte de meeste software het besturingssysteem (OS) als runtime-omgeving. Het programma draaide op elke computer waarop het stond, maar vertrouwde op de instellingen van het besturingssysteem voor toegang tot bronnen. Bronnen in dit geval zijn zaken als geheugen en programmabestanden en afhankelijkheden. De Java Runtime Environment heeft dat allemaal veranderd, althans voor Java-programma's.

WORA voor Java

Toen het voor het eerst werd geïntroduceerd, werd Java's "write once, run anywhere" -principe als revolutionair beschouwd, maar tegenwoordig wordt het als norm aangenomen voor de meeste softwaresystemen.

De Java Runtime-omgeving

We kunnen software zien als een reeks lagen die bovenop de systeemhardware zitten. Elke laag biedt services die worden gebruikt (en vereist) door de lagen erboven. De Java Runtime Environment is een softwarelaag die bovenop het besturingssysteem van een computer draait en aanvullende diensten levert die specifiek zijn voor Java.

De JRE egaliseert de diversiteit van besturingssystemen, zodat Java-programma's zonder aanpassingen op vrijwel elk besturingssysteem kunnen draaien. Het biedt ook diensten met toegevoegde waarde. Automatisch geheugenbeheer is een van de belangrijkste services van de JRE en zorgt ervoor dat programmeurs niet handmatig de toewijzing en herverdeling van geheugen hoeven te regelen.

Kortom, de JRE is een soort meta-OS voor Java-programma's. Het is een klassiek voorbeeld van abstractie , waarbij het onderliggende besturingssysteem wordt samengevoegd tot een consistent platform voor het uitvoeren van Java-applicaties.

Hoe de JRE werkt met de JVM

Een Java Virtual Machine is een actief softwaresysteem dat verantwoordelijk is voor het uitvoeren van live Java-programma's. De JRE is het systeem op schijf dat uw Java-code gebruikt, deze combineert met de benodigde bibliotheken en de JVM start om deze uit te voeren.

De JRE bevat bibliotheken en software die uw Java-programma's nodig hebben om te draaien. De Java-class loader maakt bijvoorbeeld deel uit van de Java Runtime Environment. Dit belangrijke stuk software laadt gecompileerde Java-code in het geheugen en verbindt de code met de juiste Java-klassenbibliotheken.

In de gelaagde weergave die ik zojuist heb beschreven, wordt de JVM gemaakt door de JRE. Vanuit een pakketperspectief bevat de JRE de JVM, zoals weergegeven in figuur 1.

Matthew Tyson

Installatie en gebruik van de JRE

Hoewel de JRE een conceptuele kant heeft, is het in de praktijk gewoon software die op een computer is geïnstalleerd en waarvan het doel is om uw Java-programma's uit te voeren. Als ontwikkelaar werk je meestal met de JDK en JVM, want dat zijn de platformcomponenten die je gebruikt om je Java-programma's te ontwikkelen en uit te voeren. Als gebruiker van Java-toepassingen zou u meer betrokken zijn bij de JRE, waarmee u die programma's kunt uitvoeren.

In de meeste gevallen wordt Java op uw computer geïnstalleerd en de JRE wordt daarbij meegeleverd. Als u ooit handmatig moet installeren of upgraden, kunt u de huidige JRE-versie downloaden van Oracle.

JRE-versies

De Java Runtime Environment wordt bijgewerkt voor elke nieuwe versie van Java, en de versienummers komen overeen met het Java-platformversiesysteem, dus JRE 1.8 voert bijvoorbeeld Java 8 uit. of Standard Edition) dat niet het geval is met de JRE. De meeste computers draaien een JRE die is ontwikkeld voor Java SE, waarmee elke Java-applicatie kan worden uitgevoerd, ongeacht hoe deze is ontwikkeld. De meeste mobiele apparaten worden geleverd met een JRE voor Java ME, die vooraf op het mobiele apparaat is geïnstalleerd en niet kan worden gedownload.

Nadat de JRE is geïnstalleerd, kunt u ermee communiceren op de opdrachtregel door in te voeren  java -version, wat u zal vertellen welke versie is geïnstalleerd. Op POSIX-systemen kunt u altijd de geïnstalleerde locatie controleren met which java.

De JRE in devops

De JRE valt niet erg op in de ontwikkelingsfase, waar het meestal uw programma's draait in het besturingssysteem of IDE van uw keuze. De JRE speelt een iets meer prominente rol in devops en systeembeheer omdat het wordt gebruikt voor monitoring en configuratie.

In wezen biedt de JRE de "knoppen" die u zou gebruiken om de kenmerken van een Java-applicatie te configureren en te besturen. Geheugengebruik is een goed voorbeeld, het brood en boter van systeembeheer. Hoewel geheugengebruik altijd belangrijk is, is het van vitaal belang in cloudconfiguraties, en devops is een cloudgebaseerde technologie. Als u in een devops-omgeving werkt, of geïnteresseerd bent om uit te breiden naar devops, is het een goed idee om te begrijpen hoe Java-geheugen werkt en hoe het wordt bewaakt in de JRE.

Devops of sysadmin?

Devops is een nieuwe term, maar het beschrijft iets dat al decennia waar is, namelijk de interoperabiliteit tussen ontwikkeling en bedrijfsvoering. In die zin is devops slechts een nieuwere term voor wat vroeger operaties of systeembeheer werd genoemd. Net als sysadmin is een belangrijk aspect van devops het beheer van de systemen die nodig zijn om software uit te voeren. Het beheren van de JRE is een onderdeel van het beheer van systemen waarop Java-applicaties worden uitgevoerd.

Java-geheugen en de JRE

Java-geheugen bestaat uit drie componenten: de heap, stack en metaspace (voorheen permgen genoemd).

  • Metaspace is waar Java de onveranderlijke informatie van uw programma bewaart, zoals klassendefinities.
  • Heap space is waar Java variabele inhoud bewaart.
  • Stapelruimte is waar Java functie-uitvoering en variabele verwijzingen opslaat.

Geheugenbeheer in Java 8

Tot Java 8 stond metaspace bekend als permgen. Behalve dat het een veel coolere naam is, is metaspace een belangrijke verandering in de manier waarop ontwikkelaars omgaan met Java's geheugenruimte. Voorheen gebruikte u de opdracht java -XX:MaxPermSizeom de grootte van de permgenruimte te controleren. Vanaf Java 8 vergroot Java automatisch de grootte van de metasruimte om aan de metabehoeften van uw programma te voldoen. Java 8 heeft ook een nieuwe vlag geïntroduceerd MaxMetaspaceSize, die kan worden gebruikt om de grootte van de metasruimte te beperken.

De andere geheugenopties, heap en stack, blijven hetzelfde in Java 8.

Heapspace configureren

Heapruimte is het meest dynamische onderdeel van het Java-geheugensysteem. U kunt het gebruiken -Xmsen -Xmxvlaggen om Java te vertellen hoe groot de hoop te beginnen, en hoe groot in staat te stellen te worden. Begrijpen hoe u deze vlaggen kunt afstemmen op specifieke programmabehoeften is een belangrijk aspect van geheugenbeheer in Java. Het ideaal is om de hoop groot genoeg te maken om de meest efficiënte afvalinzameling te bereiken. Dat wil zeggen, u wilt voldoende geheugen vrijmaken om het programma te laten draaien, maar u wilt niet dat het groter wordt dan nodig is.

Stackspace configureren

Stackspace is waar functieaanroepen en variabele verwijzingen in de wachtrij worden geplaatst. Stapelruimte is de bron van de op een na meest beruchte fout bij het programmeren van Java: de uitzondering op de stack overflow (de eerste is de uitzondering op de null-pointer). De uitzondering voor stack overflow geeft aan dat u geen stack meer heeft omdat er te veel van is gereserveerd. Meestal krijg je een stack-overflow wanneer een methode of methoden elkaar op een circulaire manier aanroepen, waardoor een steeds groeiend aantal functieaanroepen in de stack wordt besteed.

U gebruikt de -Xssschakelaar om de startgrootte van de stapel te configureren. De stapel groeit dan dynamisch volgens de behoeften van het programma.

Monitoring van Java-toepassingen

Hoewel applicatiebewaking een functie is van de JVM, biedt de JRE configuratie-opties, die de noodzakelijke basis vormen voor monitoring. Er is een verscheidenheid aan tools beschikbaar voor het bewaken van Java-applicaties, van de klassiekers (zoals de Unix-opdracht top) tot geavanceerde oplossingen voor bewaking op afstand, zoals de infrastructuurbewaking van Oracle.

Tussen deze opties bevinden zich visuele profilers zoals VisualVM die het mogelijk maken om een ​​actieve JVM te inspecteren. Met deze tools kunt u hotspots en geheugenlekken opsporen en het algehele geheugengebruik in uw systeem bekijken.

Conclusie

De Java Runtime Environment is het programma op de schijf dat Java-toepassingen laadt die de JVM kan uitvoeren. Een JRE wordt standaard meegeleverd wanneer u de Java Development Kit downloadt, en elke JRE bevat de kern Java-klassenbibliotheken, een Java-klassenlader en een Java Virtual Machine. Het is handig om te begrijpen hoe de JVM, JDK en JRE samenwerken, vooral voor het werken in cloud- en devops-omgevingen. In deze omgevingen speelt de JRE een sterkere rol bij het bewaken en configureren dan bij de ontwikkeling van traditionele Java-applicaties.

Dit verhaal, "Wat is de JRE? Inleiding tot de Java Runtime-omgeving" is oorspronkelijk gepubliceerd door JavaWorld.