1. Définition
JRE(Java Runtime Enviroment)C'est l'environnement d'exécution de Java. Il s'adresse aux utilisateurs de programmes Java, pas aux développeurs. Si vous téléchargez et installez uniquement le JRE, votre système ne peut exécuter que des programmes Java. Le JRE est un ensemble d'environnements nécessaires à l'exécution de programmes Java, comprenant l'implémentation standard de la JVM et les bibliothèques de classes de base de Java. Il inclut la machine virtuelle Java, les classes de base de la plateforme Java et les fichiers de support. Il n'inclut pas les outils de développement (compilateur, débogueur, etc.).
JDK (Java Development Kit), également appelé J2SDK (Java2 Software Development Kit), est un kit de développement Java. Il fournit l'environnement de développement Java (fournissant des outils tels que le compilateur javac, utilisé pour compiler des fichiers Java en fichiers de classe) et l'environnement d'exécution (fournissant la JVM et les packages auxiliaires Runtime, utilisés pour analyser les fichiers de classe afin qu'ils puissent s'exécuter). Si vous téléchargez et installez le JDK, vous pouvez non seulement développer des programmes Java, mais aussi disposer de la plateforme pour exécuter des programmes Java. Le JDK est le cœur de l'ensemble de Java, comprenant le Java Runtime Environment (JRE), un ensemble d'outils Java tools.jar et la bibliothèque de classes standard Java (rt.jar).
2. Différence
Le JRE contient principalement : les fichiers de classe de la bibliothèque de classes Java (tous empaquetés sous forme de jars dans le répertoire lib) et la machine virtuelle (jvm.dll) ; le JDK contient principalement : les fichiers de classe de la bibliothèque de classes Java (tous empaquetés sous forme de jars dans le répertoire lib) et est livré avec son propre JRE. Alors pourquoi le JDK est-il livré avec son propre JRE ? De plus, les dossiers client et server sous jdk/jre/bin contiennent tous deux jvm.dll (ce qui indique que le JRE livré avec le JDK possède deux machines virtuelles).
Vous souvenez-vous d'avoir défini le chemin jdk/bin dans la variable d'environnement path ?Le professeur dira à tout le monde que sans le définir, javac et java ne peuvent pas être utilisés. En effet, le répertoire jdk/bin contient toutes les commandes. Mais quelqu'un a-t-il pensé que la commande java que nous utilisons ne vient pas du répertoire jdk/bin mais du répertoire jre/bin ? Si vous ne le croyez pas, vous pouvez faire une expérience : vous pouvez couper le java.exe dans le répertoire jdk/bin vers un autre emplacement et exécuter à nouveau un programme Java. Qu'avez-vous trouvé ? Tout va bien ! (Il n'y a pas de commande javac dans le JRE, la raison est simple : ce n'est pas un environnement de développement.) Ensuite, quelqu'un peut demander : je n'ai évidemment pas défini le répertoire jre/bin dans la variable d'environnement ? Réfléchissez : si Java doit être fourni pour être utilisé par la plupart des gens, ils n'ont pas besoin du JDK pour le développement ; ils n'ont besoin que du JRE pour faire fonctionner les programmes Java. Alors chaque client devrait encore définir manuellement les variables d'environnement — comme c'est pénible ! Donc lors de l'installation du JRE, l'installateur ajoute automatiquement le java.exe du JRE aux variables système. La méthode de vérification est très simple : allez dans Windows/system32 et jetez un œil. Qu'avez-vous trouvé ? Il y a un java.exe.
3. Difficultés
Si vous installez le JDK, vous constaterez que votre ordinateur possède deux ensembles de JRE, l'un situé à C:\Program Files\Java\jre6, et l'autre situé àC:\Program Files\Java\jdk1.6.0_41\jre répertoire.
Le statut du JRE est semblable à celui d'un PC. Nos applications Win32 écrites ont besoin du système d'exploitation pour nous aider à les exécuter ; de même, nos programmes Java écrits ont aussi besoin du JRE pour s'exécuter. Ainsi, après avoir installé le JDK, si deux ensembles de JRE sont installés à deux endroits différents sur le disque dur, vous pouvez imaginer que votre ordinateur possède deux PC Java virtuels, tous deux capables d'exécuter des programmes Java. Nous pouvons donc dire que tant que votre ordinateur a le JRE installé, il peut exécuter correctement des applications Java.
1. Pourquoi Sun fait-il en sorte que le JDK installe deux JRE identiques ?
C'est parce que le JDK contient de nombreux outils de développement écrits en Java, tels que javac.exe, jar.exe, etc. Ces commandes sont placées dans le répertoire C:\Program Files\Java\jdk1.6.0_41\bin.
Parce que ce sont des commandes écrites en Java, elles doivent s'appuyer sur les paquets jar de Java. Ces paquets jar sont stockés dans le répertoireC:\Program Files\Java\jdk1.6.0_41\lib.
Si vous renommez tools.jar dans le répertoire C:\Program Files\Java\jdk1.6.0_41\lib\ en tools1.jar, puis exécutez javac.exe, le résultat suivant s'affiche :
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac /Main
Mais si vous entrez :
java -cp C:\Program Files\Java\jdk1.6.0_41\lib\tools1.jar com.sun.tools.javac.Mainx
Vous obtiendrez le même résultat qu'avec javac.exe.
De cela, nous pouvons prouver que javac.exe n'est qu'un wrapper (Wrapper), et il est conçu pour éviter aux développeurs de saisir des commandes trop longues.
De plus, nous pouvons constater que les programmes du répertoire C:\Program Files\Java\jdk1.6.0_41\bin sont tous très petits, pas plus de 29K. Nous pouvons en tirer la conclusion suivante : les outils du JDK sont presque tous écrits en Java, donc ce sont aussi des applications Java. Par conséquent, pour utiliser les outils inclus avec le JDK afin de développer des programmes Java, vous devez également inclure un JRE. Ainsi, le JRE du répertoire C:\Program Files\Java\jdk1.6.0_41\jre est utilisé pour exécuter des programmes Java généraux.
2. Si un ordinateur possède deux JRE ou plus installés, qui décide ?
Cette tâche importante incombe à java.exe. Le rôle de java.exe est de trouver le JRE approprié pour exécuter un programme Java. java.exe recherche le JRE dans l'ordre suivant : s'il existe un JRE dans son propre répertoire ; s'il existe un JRE dans le répertoire parent ; en interrogeant le registre :
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment]
Par conséquent, le résultat d'exécution de java.exe dépend beaucoup du JRE de votre ordinateur qui est exécuté.
Source de l'article : http://swiftlet.net/archives/639