1. Definition
JRE(Java Runtime Enviroment)Sie ist die Laufzeitumgebung für Java. Sie richtet sich an Benutzer von Java-Programmen, nicht an Entwickler. Wenn Sie nur die JRE herunterladen und installieren, kann Ihr System nur Java-Programme ausführen. Die JRE ist eine Sammlung von Umgebungen, die zum Ausführen von Java-Programmen notwendig sind, einschließlich der Standardimplementierung der JVM und der Java-Kernklassenbibliotheken. Sie umfasst die Java Virtual Machine, die Kernklassen der Java-Plattform und unterstützende Dateien. Sie enthält keine Entwicklungswerkzeuge (Compiler, Debugger usw.).
JDK (Java Development Kit), auch bekannt als J2SDK (Java2 Software Development Kit), ist ein Java-Entwicklungskit. Es bietet die Java-Entwicklungsumgebung (mit Werkzeugen wie dem Compiler javac, der verwendet wird, um Java-Dateien in class-Dateien zu kompilieren) und die Laufzeitumgebung (mit der JVM und Runtime-Hilfspaketen, die verwendet werden, um class-Dateien zu parsen, damit sie ausgeführt werden können). Wenn Sie das JDK herunterladen und installieren, können Sie nicht nur Java-Programme entwickeln, sondern haben auch die Plattform, um Java-Programme auszuführen. Das JDK ist der Kern des gesamten Java und umfasst die Java Runtime Environment (JRE), eine Reihe von Java-Tools tools.jar und die Java-Standardklassenbibliothek (rt.jar).
2. Unterschied
Die JRE enthält hauptsächlich: die Klassendateien der Java-Klassenbibliothek (alle als Jars im lib-Verzeichnis gepackt) und die virtuelle Maschine (jvm.dll); das JDK enthält hauptsächlich: die Klassendateien der Java-Klassenbibliothek (alle als Jars im lib-Verzeichnis gepackt) und bringt seine eigene JRE mit. Warum bringt das JDK also seine eigene JRE mit? Außerdem enthalten sowohl der client- als auch der server-Ordner unter jdk/jre/bin jvm.dll (was darauf hinweist, dass die JRE, die mit dem JDK geliefert wird, zwei virtuelle Maschinen hat).
Erinnern Sie sich daran, den jdk/bin-Pfad in der Umgebungsvariablen path festzulegen?Der Lehrer wird allen sagen, dass ohne diese Einstellung javac und java nicht verwendet werden können. Tatsächlich enthält das Verzeichnis jdk/bin alle Befehle. Aber hat sich jemand gedacht, dass der java-Befehl, den wir verwenden, nicht aus dem Verzeichnis jdk/bin stammt, sondern aus dem Verzeichnis jre/bin? Wenn Sie es nicht glauben, können Sie ein Experiment machen: Sie können die java.exe im Verzeichnis jdk/bin an einen anderen Ort verschieben und erneut ein Java-Programm ausführen. Was haben Sie festgestellt? Alles ist in Ordnung! (In der JRE gibt es keinen javac-Befehl, der Grund ist einfach: Es ist keine Entwicklungsumgebung.) Dann könnte jemand fragen: Ich habe das Verzeichnis jre/bin offensichtlich nicht in der Umgebungsvariablen festgelegt? Denken Sie darüber nach: Wenn Java den meisten Menschen zur Verfügung gestellt werden soll, brauchen sie das JDK nicht für die Entwicklung; sie brauchen nur die JRE, damit Java-Programme laufen. Dann müsste jeder Kunde trotzdem manuell Umgebungsvariablen festlegen — wie lästig! Wenn die JRE installiert wird, fügt der Installer also automatisch die java.exe der JRE zu den Systemvariablen hinzu. Die Überprüfungsmethode ist ganz einfach: Gehen Sie zu Windows/system32 und schauen Sie nach. Was haben Sie festgestellt? Es gibt eine java.exe.
3. Schwierigkeiten
Wenn Sie das JDK installieren, werden Sie feststellen, dass Ihr Computer zwei JRE-Installationen hat, eine im Verzeichnis C:\Program Files\Java\jre6und die andere im VerzeichnisC:\Program Files\Java\jdk1.6.0_41\jre .
Der Status der JRE ist wie der eines PCs. Unsere geschriebenen Win32-Anwendungen benötigen das Betriebssystem, um ausgeführt zu werden; ähnlich benötigen unsere geschriebenen Java-Programme auch die JRE, um zu laufen. Wenn also nach der Installation des JDK zwei JRE-Sätze an zwei verschiedenen Stellen auf der Festplatte installiert sind, dann können Sie sich vorstellen, dass Ihr Computer zwei virtuelle Java-PCs hat, die beide Java-Programme ausführen können. Man kann also sagen, dass Ihr Computer, solange die JRE installiert ist, Java-Anwendungen korrekt ausführen kann.
1. Warum lässt Sun das JDK zwei identische JREs installieren?
Das liegt daran, dass das JDK viele in Java geschriebene Entwicklungswerkzeuge enthält, wie z. B. javac.exe, jar.exe usw. Diese Befehle befinden sich im Verzeichnis C:\Program Files\Java\jdk1.6.0_41\bin.
Da es sich um in Java geschriebene Befehle handelt, müssen sie auf die JAR-Pakete von Java zurückgreifen. Diese JAR-Pakete sind im VerzeichnisC:\Program Files\Java\jdk1.6.0_41\libgespeichert.
Wenn Sie tools.jar im Verzeichnis C:\Program Files\Java\jdk1.6.0_41\lib\ in tools1.jar umbenennen und dann javac.exe ausführen, wird das folgende Ergebnis angezeigt:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac /Main
Wenn Sie jedoch Folgendes eingeben:
java -cp C:\Program Files\Java\jdk1.6.0_41\lib\tools1.jar com.sun.tools.javac.Mainx
Sie erhalten dasselbe Ergebnis wie bei javac.exe.
Damit können wir beweisen, dass javac.exe nur ein Wrapper (Wrapper) ist und dazu dient, Entwicklern das Eingeben zu langer Befehle zu ersparen.
Außerdem können wir feststellen, dass die Programme im Verzeichnis C:\Program Files\Java\jdk1.6.0_41\bin alle sehr klein sind, nicht größer als 29K. Daraus können wir den Schluss ziehen: Die Werkzeuge im JDK sind fast alle in Java geschrieben, also sind sie auch Java-Anwendungen. Um die mit dem JDK mitgelieferten Werkzeuge zum Entwickeln von Java-Programmen zu verwenden, müssen Sie daher auch eine JRE einbeziehen. Die JRE im Verzeichnis C:\Program Files\Java\jdk1.6.0_41\jre dient also zum Ausführen allgemeiner Java-Programme.
2. Wenn auf einem Computer zwei oder mehr JREs installiert sind, wer entscheidet?
Diese wichtige Aufgabe fällt java.exe zu. Die Aufgabe von java.exe besteht darin, die passende JRE zum Ausführen eines Java-Programms zu finden. java.exe sucht die JRE in der folgenden Reihenfolge: ob sich eine JRE in seinem eigenen Verzeichnis befindet; ob sich eine JRE im übergeordneten Verzeichnis befindet; Abfragen der Registry:
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment]
Daher hängt das Ausführungsergebnis von java.exe stark davon ab, welche JRE auf Ihrem Computer ausgeführt wird.
Artikelquelle: http://swiftlet.net/archives/639