Was ist die JRE? Einführung in die Java-Laufzeitumgebung

Das Java Development Kit (JDK), die Java Virtual Machine (JVM) und die Java Runtime Environment (JRE) bilden zusammen ein leistungsstarkes Trifecta von Java-Plattformkomponenten für die Entwicklung und Ausführung von Java-Anwendungen. Ich habe zuvor das JDK und die JVM eingeführt. In diesem kurzen Tutorial lernen Sie die JRE kennen, die Laufzeitumgebung für Java.

In der Praxis ist eine Laufzeitumgebung eine Software, mit der andere Software ausgeführt werden kann. Als Laufzeitumgebung für Java enthält die JRE die Java-Klassenbibliotheken, den Java-Klassenlader und die Java Virtual Machine. In diesem System:

  • Der Klassenlader ist dafür verantwortlich, Klassen korrekt zu laden und sie mit den Java-Kernklassenbibliotheken zu verbinden.
  • Die JVM ist dafür verantwortlich, dass Java-Anwendungen über die Ressourcen verfügen, die sie für die Ausführung und Leistung in Ihrem Gerät oder Ihrer Cloud-Umgebung benötigen.
  • Die JRE ist hauptsächlich ein Container für diese anderen Komponenten und für die Orchestrierung ihrer Aktivitäten verantwortlich.

In den folgenden Abschnitten werden wir uns eingehender mit der Zusammenarbeit dieser Komponenten befassen.

JDK, JRE und JVM installieren

Aus Installationssicht enthält jedes Mal, wenn Sie ein JDK herunterladen, eine versionierungskompatible JRE und diese JRE eine Standard-JVM. Sie können die JRE auch separat vom JDK herunterladen und aus einer Vielzahl von JVMs auswählen. Die Standardeinstellungen funktionieren für die meisten Implementierungen gut, insbesondere wenn Sie mit Java beginnen.

Was ist eine Laufzeitumgebung?

Ein Softwareprogramm muss ausgeführt werden, und dazu muss eine Umgebung ausgeführt werden. Die Laufzeitumgebung lädt Klassendateien und stellt sicher, dass Zugriff auf Speicher und andere Systemressourcen vorhanden ist, um sie auszuführen. In der Vergangenheit verwendeten die meisten Programme das Betriebssystem als Laufzeitumgebung. Das Programm lief auf jedem Computer, auf dem es sich befand, stützte sich jedoch auf die Betriebssystemeinstellungen für den Ressourcenzugriff. Ressourcen in diesem Fall wären beispielsweise Speicher- und Programmdateien und Abhängigkeiten. Die Java-Laufzeitumgebung hat dies zumindest für Java-Programme geändert.

WORA für Java

Als es zum ersten Mal eingeführt wurde, galt Javas Prinzip "Einmal schreiben, überall ausführen" als revolutionär, aber heute wurde es für die meisten Softwaresysteme als Norm übernommen.

Die Java-Laufzeitumgebung

Wir können Software als eine Reihe von Schichten betrachten, die auf der Systemhardware liegen. Jede Schicht bietet Dienste, die von den darüber liegenden Schichten verwendet (und benötigt) werden. Die Java-Laufzeitumgebung ist eine Softwareschicht, die auf dem Betriebssystem eines Computers ausgeführt wird und zusätzliche Java-spezifische Dienste bereitstellt.

Die JRE glättet die Vielfalt der Betriebssysteme und stellt sicher, dass Java-Programme ohne Änderungen auf praktisch jedem Betriebssystem ausgeführt werden können. Es bietet auch Mehrwertdienste. Die automatische Speicherverwaltung ist einer der wichtigsten Dienste der JRE, um sicherzustellen, dass Programmierer die Zuweisung und Neuzuweisung von Speicher nicht manuell steuern müssen.

Kurz gesagt, die JRE ist eine Art Meta-Betriebssystem für Java-Programme. Es ist ein klassisches Beispiel für Abstraktion , bei dem das zugrunde liegende Betriebssystem in eine konsistente Plattform zum Ausführen von Java-Anwendungen abstrahiert wird.

Wie die JRE mit der JVM funktioniert

Eine Java Virtual Machine ist ein laufendes Softwaresystem, das für die Ausführung von Live-Java-Programmen verantwortlich ist. Die JRE ist das On-Disk-System, das Ihren Java-Code verwendet, ihn mit den erforderlichen Bibliotheken kombiniert und die JVM startet, um ihn auszuführen.

Die JRE enthält Bibliotheken und Software, die Ihre Java-Programme ausführen müssen. Beispielsweise ist der Java-Klassenladeprogramm Teil der Java-Laufzeitumgebung. Diese wichtige Software lädt kompilierten Java-Code in den Speicher und verbindet den Code mit den entsprechenden Java-Klassenbibliotheken.

In der eben beschriebenen Ebenenansicht wird die JVM von der JRE erstellt. Aus Paketsicht enthält die JRE die JVM, wie Abbildung 1 zeigt.

Matthew Tyson

JRE installieren und verwenden

Während die JRE eine konzeptionelle Seite hat, ist sie in der Praxis nur Software, die auf einem Computer installiert ist und deren Zweck darin besteht, Ihre Java-Programme auszuführen. Als Entwickler arbeiten Sie hauptsächlich mit JDK und JVM, da dies die Plattformkomponenten sind, mit denen Sie Ihre Java-Programme entwickeln und ausführen. Als Benutzer einer Java-Anwendung wären Sie stärker in die JRE involviert, mit der Sie diese Programme ausführen können.

In den meisten Fällen wird auf Ihrem Computer Java installiert, und die JRE wird mitgeliefert. Wenn Sie jemals manuell installieren oder aktualisieren müssen, können Sie die aktuelle JRE-Version von Oracle herunterladen.

JRE-Versionen

Die Java-Laufzeitumgebung wird für jede neue Java-Version aktualisiert, und ihre Versionsnummern stimmen mit dem Versionssystem der Java-Plattform überein. So wird beispielsweise in JRE 1.8 Java 8 ausgeführt. Sie können aus einer Vielzahl von JDK-Paketen auswählen (z. B. Enterprise Edition) oder Standard Edition) ist dies bei der JRE nicht der Fall. Auf den meisten Computern wird eine für Java SE entwickelte JRE ausgeführt, mit der jede Java-Anwendung ausgeführt werden kann, unabhängig davon, wie sie entwickelt wurde. Die meisten Mobilgeräte verfügen über eine JRE für Java ME, die auf dem Mobilgerät vorinstalliert ist und nicht zum Download zur Verfügung steht.

Sobald die JRE installiert ist, können Sie über die Befehlszeile mit ihr interagieren, indem Sie Folgendes eingeben  java -version, um zu erfahren, welche Version installiert ist. Auf POSIX-Systemen können Sie den installierten Speicherort jederzeit mit überprüfen which java.

Die JRE in Devops

Die JRE ist in der Entwicklungsphase, in der Ihre Programme meist nur im Betriebssystem oder in der IDE Ihrer Wahl ausgeführt werden, nicht sehr auffällig. Die JRE spielt eine etwas wichtigere Rolle bei der Entwicklung von Entwicklern und Systemen, da sie zur Überwachung und Konfiguration verwendet wird.

Grundsätzlich bietet die JRE die "Knöpfe", mit denen Sie die Eigenschaften einer Java-Anwendung konfigurieren und steuern würden. Die Speichernutzung ist ein Paradebeispiel für die Systemadministration. Während die Speichernutzung immer wichtig ist, ist sie in Cloud-Konfigurationen von entscheidender Bedeutung, und devops ist eine Cloud-basierte Technologie. Wenn Sie in einer Devops-Umgebung arbeiten oder sich für Devops interessieren, ist es eine gute Idee zu verstehen, wie Java-Speicher funktioniert und wie er in der JRE überwacht wird.

Devops oder Sysadmin?

Devops ist ein neuer Begriff, der jedoch etwas beschreibt, das seit Jahrzehnten zutrifft, nämlich die Interoperabilität zwischen Entwicklung und Betrieb. In diesem Sinne ist devops nur ein neuerer Begriff für das, was früher als Betrieb oder Systemadministration bezeichnet wurde. Wie bei sysadmin ist ein wichtiger Aspekt von Devops die Verwaltung der Systeme, die zur Ausführung von Software erforderlich sind. Die Verwaltung der JRE ist Teil der Verwaltung von Systemen, auf denen Java-Anwendungen ausgeführt werden.

Java-Speicher und die JRE

Der Java-Speicher besteht aus drei Komponenten: Heap, Stack und Metaspace (zuvor Permgen genannt).

  • In Metaspace speichert Java die unveränderlichen Informationen Ihres Programms wie Klassendefinitionen.
  • Im Heap-Bereich speichert Java variablen Inhalt.
  • Im Stapelbereich speichert Java die Funktionsausführung und Variablenreferenzen.

Speicherverwaltung in Java 8

Bis Java 8 war Metaspace als Permgen bekannt. Metaspace ist nicht nur ein viel cooler Name, sondern auch eine wesentliche Änderung in der Art und Weise, wie Entwickler mit dem Speicher von Java interagieren. Bisher haben Sie den Befehl verwendet java -XX:MaxPermSize, um die Größe des Permgen-Raums zu überwachen. Ab Java 8 vergrößert Java automatisch den Metaspace, um den Metaanforderungen Ihres Programms gerecht zu werden. In Java 8 wurde außerdem ein neues Flag eingeführt, MaxMetaspaceSizemit dem die Größe des Metaspaces begrenzt werden kann.

Die anderen Speicheroptionen, Heap und Stack, bleiben in Java 8 gleich.

Heap-Speicher konfigurieren

Der Heap-Speicherplatz ist der dynamischste Teil des Java-Speichersystems. Sie können die Verwendung -Xmsund -XmxFahnen Java zu sagen , wie groß die Halde zu starten, und wie groß , damit es werden. Das Verständnis, wie diese Flags für bestimmte Programmanforderungen optimiert werden, ist ein wichtiger Aspekt der Speicherverwaltung in Java. Das Ideal ist, den Haufen groß genug zu machen, um die effizienteste Müllabfuhr zu erreichen. Das heißt, Sie möchten genügend Speicher zulassen, damit das Programm ausgeführt werden kann, aber Sie möchten nicht, dass es größer als erforderlich ist.

Stapelspeicher konfigurieren

Im Stapelbereich werden Funktionsaufrufe und Variablenreferenzen in die Warteschlange gestellt. Der Stapelspeicher ist die Quelle des zweithäufigsten Fehlers in der Java-Programmierung: die Stapelüberlaufausnahme (die erste ist die Nullzeigerausnahme). Die Stapelüberlaufausnahme zeigt an, dass Ihnen der Stapelspeicherplatz ausgeht, weil zu viel davon reserviert wurde. Normalerweise kommt es zu einem Stapelüberlauf, wenn sich eine oder mehrere Methoden kreisförmig aufrufen und dadurch eine ständig wachsende Anzahl von Funktionsaufrufen in den Stapel investieren.

Mit dem -XssSchalter konfigurieren Sie die Startgröße des Stapels. Der Stapel wächst dann dynamisch entsprechend den Anforderungen des Programms.

Überwachung von Java-Anwendungen

Obwohl die Anwendungsüberwachung eine Funktion der JVM ist, bietet die JRE Konfigurationsoptionen, die die notwendige Basis für die Überwachung darstellen. Für die Überwachung von Java-Anwendungen stehen verschiedene Tools zur Verfügung, von Klassikern (wie dem Unix-Befehl top) bis hin zu hoch entwickelten Fernüberwachungslösungen wie der Infrastrukturüberwachung von Oracle.

Dazwischen befinden sich visuelle Profiler wie VisualVM, mit denen eine laufende JVM überprüft werden kann. Mit diesen Tools können Sie Hotspots und Speicherlecks aufspüren und den gesamten Speicherverbrauch in Ihrem System überwachen.

Fazit

Die Java-Laufzeitumgebung ist das Programm auf der Festplatte, das Java-Anwendungen lädt, damit die JVM ausgeführt werden kann. Eine JRE ist standardmäßig enthalten, wenn Sie das Java Development Kit herunterladen, und jede JRE enthält die Java-Kernklassenbibliotheken, einen Java-Klassenlader und eine Java Virtual Machine. Es ist hilfreich zu verstehen, wie JVM, JDK und JRE interagieren, insbesondere für die Arbeit in Cloud- und Devops-Umgebungen. In diesen Umgebungen spielt die JRE bei der Überwachung und Konfiguration eine stärkere Rolle als bei der herkömmlichen Entwicklung von Java-Anwendungen.

Diese Geschichte "Was ist die JRE? Einführung in die Java-Laufzeitumgebung" wurde ursprünglich von JavaWorld veröffentlicht.